问题标签 [memory-reallocation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
560 浏览

c++ - std::aligned_alloc() 的重新分配等价物是什么?

我注意到std::aligned_alloc()进入 C++17,我喜欢它。但是 - 当我需要重新分配时会发生什么?我可以手动执行此操作(假设当前分配地址的可用空间只是我要求的空间量),但标准库中不应该有这样的工具吗?

0 投票
3 回答
708 浏览

buffer - Vulkan - 1 个统一缓冲区,N 个网格 - 动态 VkDeviceMemory

假设我在随机位置渲染简单的立方体。

将其中 3 个作为立方体的起始数量,应用程序获取一个VkBuffer句柄并将其绑定到 a VkDeviceMemory,以便将所有立方体的模型矩阵连续存储在其中,然后着色器通过描述符集访问该句柄。VkDeviceMemory对这 3 个立方体有足够的内存。

我想要做的是,每次用户按下一个键时,一个新的立方体应该在某个地方弹出。我的问题是,我应该如何调整该内存的大小?你能概述一下我应该经历的步骤吗?

我意识到我可以为每个立方体使用单独的VkBuffer/VkDeviceMemory但我不想这样做。我读到的所有地方都说这是一种反模式。

我是否应该丢弃VkDeviceMemory,分配一个大小合适的新的,然后收工?描述符集呢,它们需要任何特殊处理吗?

在我读过的某些地方,您可以分配非常大的数据块,因此在处理越来越多的多维数据集时,您是安全的因为已经达到了极限。有没有办法绕过这个自我施加的限制?

编辑:我也意识到一次分配一小块是一个坏主意。我感兴趣的是重新分配本身,以及它需要什么。

0 投票
0 回答
161 浏览

c - 文件太大时 fscanf 无法读取整个文件

我正在尝试使用 C 用 fscanf 读取一个大文本文件(例如,一本超过一万字的小说),但是每次程序都会读取到某个点并且似乎达到 EOF,而它距离很远文件结尾。这是我的代码:

有谁知道这里发生了什么?我相信我每次都分配了足够的内存。感谢任何帮助的人。

0 投票
0 回答
44 浏览

c - C push() 中的 2D 动态数组可能只有 3 倍

我在 C 和 push() 函数 (creaMatri()) 中有一个 2D 动态分配的数组,它向其中添加了指定数量的子元素的新元素。函数适用于前三个调用,就像一个魅力,但第四个返回错误:

realloc(): 无效的旧尺寸

size是 2D 数组,其中包含知道 push() 需要分配多少子元素所需的数字。

0 投票
1 回答
141 浏览

c - 使用 realloc 减少的问题

我正在尝试删除,realloc但它没有按我预期的方式工作......

我想删除的值有时会保留。请在我的代码输出中查看这张照片。我在让我烦恼的线条上画了一个红色标记: https ://ibb.co/C1TMHF5

0 投票
2 回答
155 浏览

c - 为队列设计调整大小功能

我目前正在尝试为队列数据结构设计一个公共 API,并调整函数以更改其大小。我的第一个意图是通过以下方式做到这一点:

问题是我阅读了合同,realloc内容如下:

realloc函数返回一个指向新对象的指针(它可能与指向旧对象的指针具有相同的值),如果无法分配新对象,则返回一个空指针。

重新分配函数返回一个新对象并回收旧对象是一种常见的方法吗?因此,在这种情况下,我应该重新设计int queue_resize(queue *queue_ptr, size_t);以进行queue * queue_resize(queue *queue_ptr, size_t);相应的合同更改。

0 投票
5 回答
321 浏览

c - Is there a way to change an array size using malloc and free functions only?

As homework, I have to write a function that changes an array's size using malloc and free functions only.

I know how to do it with realloc, but I don't know how to do it with malloc.

and I need to write this function :

As mentioned in the homework: it requires only one reallocation and only one memory release, and only one copy of the elements from the old array. I searched a lot but only found results using realloc.

Is it even possible to do that without using realloc?

0 投票
1 回答
181 浏览

c++ - 如果类数组中的向量被动态 push_backed,内存如何工作?

假设我们有以下类:

此外,我们在 main 函数中有以下代码来声明类数组:

在这些情况下,测试对象被实例化。

现在,如果我在每个类内的向量中随机附加多个项目,

在调整它们的内存大小时,可能存在碰撞每个类内每个向量的内存地址范围的机会。

在这种情况下,是否将整个“测试”对象复制到其他内存区域并调整向量的大小?或者,向量 STL 是否仅在类引用向量时复制到其他内存区域并调整大小?

完全,这样编码不是一个好主意吗?

0 投票
1 回答
196 浏览

c++ - 为堆栈和堆指针重新分配内存

我开发了一个阻塞队列类如下

我希望该类尽可能通用,因此我使用了一个 void 指针,该指针在元素添加到队列时分配,并在从队列中删除时释放。

如果队列为空,take()函数会一直等待,m_condition直到添加新元素。

在释放元素之前,必须给出一个指针event来复制元素的内容。

为了确保给定的指针具有正确的大小来复制元素的内容,我重新分配了指针及其大小。

我遇到的问题是它不允许传递函数的语言环境变量,因为它是在堆栈上分配的。

所以如果我做这样的事情

我会invalid old size在 realloc 上出错。

因此,如果我传递一个空指针或一个堆分配的变量,它会起作用,但如果我传递一个堆栈变量地址,它就不会。

有没有办法允许将堆栈变量地址传递给take()函数?

0 投票
1 回答
54 浏览

c++ - 更改保持原始指针指向其字段的对象的地址

我想重新分配一个具有自引用的类,名为CarJoker.
这里的“重新分配”意味着 = 更改对象的地址。

CarJoker这种技术对于在可调整大小的连续数组(例如池)中制作每个生命实例是必要的。

我考虑使用std::move,但它不能CarJoker::wheels以我希望的方式移动。
( MCVE )

std::move,car2.wheels[0]表示&car1.wa不是&car2.wa如我所愿。
我知道原因,但这不是我的目标,我不知道解决它的优雅方法。

我可怜的解决方法

这是一种不优雅的方式(MCVE):-

缺点:-
1. 很脏。
2. 我必须reIni()为每个在池中存在此类症状的类创建一个特殊名称函数 ( )。我的池也必须识别该功能(例如,使用模板或虚拟功能注册)。

我可怜的解决方法2

我会工作,但我觉得这样的解决方法很疯狂。
该限制增加了编码人员的陷阱。

如果wheels碰巧需要缓存计算昂贵的结果,现在getWheels()经常调用会很昂贵。