问题标签 [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.
c++ - std::aligned_alloc() 的重新分配等价物是什么?
我注意到std::aligned_alloc()
进入 C++17,我喜欢它。但是 - 当我需要重新分配时会发生什么?我可以手动执行此操作(假设当前分配地址的可用空间只是我要求的空间量),但标准库中不应该有这样的工具吗?
buffer - Vulkan - 1 个统一缓冲区,N 个网格 - 动态 VkDeviceMemory
假设我在随机位置渲染简单的立方体。
将其中 3 个作为立方体的起始数量,应用程序获取一个VkBuffer
句柄并将其绑定到 a VkDeviceMemory
,以便将所有立方体的模型矩阵连续存储在其中,然后着色器通过描述符集访问该句柄。VkDeviceMemory
对这 3 个立方体有足够的内存。
我想要做的是,每次用户按下一个键时,一个新的立方体应该在某个地方弹出。我的问题是,我应该如何调整该内存的大小?你能概述一下我应该经历的步骤吗?
我意识到我可以为每个立方体使用单独的VkBuffer
/VkDeviceMemory
但我不想这样做。我读到的所有地方都说这是一种反模式。
我是否应该丢弃VkDeviceMemory
,分配一个大小合适的新的,然后收工?描述符集呢,它们需要任何特殊处理吗?
在我读过的某些地方,您可以分配非常大的数据块,因此在处理越来越多的多维数据集时,您是安全的因为已经达到了极限。有没有办法绕过这个自我施加的限制?
编辑:我也意识到一次分配一小块是一个坏主意。我感兴趣的是重新分配本身,以及它需要什么。
c - 文件太大时 fscanf 无法读取整个文件
我正在尝试使用 C 用 fscanf 读取一个大文本文件(例如,一本超过一万字的小说),但是每次程序都会读取到某个点并且似乎达到 EOF,而它距离很远文件结尾。这是我的代码:
有谁知道这里发生了什么?我相信我每次都分配了足够的内存。感谢任何帮助的人。
c - C push() 中的 2D 动态数组可能只有 3 倍
我在 C 和 push() 函数 (creaMatri()) 中有一个 2D 动态分配的数组,它向其中添加了指定数量的子元素的新元素。函数适用于前三个调用,就像一个魅力,但第四个返回错误:
realloc(): 无效的旧尺寸
size是 2D 数组,其中包含知道 push() 需要分配多少子元素所需的数字。
c - 使用 realloc 减少的问题
我正在尝试删除,realloc
但它没有按我预期的方式工作......
我想删除的值有时会保留。请在我的代码输出中查看这张照片。我在让我烦恼的线条上画了一个红色标记: https ://ibb.co/C1TMHF5
c - 为队列设计调整大小功能
我目前正在尝试为队列数据结构设计一个公共 API,并调整函数以更改其大小。我的第一个意图是通过以下方式做到这一点:
问题是我阅读了合同,realloc
内容如下:
该
realloc
函数返回一个指向新对象的指针(它可能与指向旧对象的指针具有相同的值),如果无法分配新对象,则返回一个空指针。
重新分配函数返回一个新对象并回收旧对象是一种常见的方法吗?因此,在这种情况下,我应该重新设计int queue_resize(queue *queue_ptr, size_t);
以进行queue * queue_resize(queue *queue_ptr, size_t);
相应的合同更改。
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
?
c++ - 如果类数组中的向量被动态 push_backed,内存如何工作?
假设我们有以下类:
此外,我们在 main 函数中有以下代码来声明类数组:
在这些情况下,测试对象被实例化。
现在,如果我在每个类内的向量中随机附加多个项目,
在调整它们的内存大小时,可能存在碰撞每个类内每个向量的内存地址范围的机会。
在这种情况下,是否将整个“测试”对象复制到其他内存区域并调整向量的大小?或者,向量 STL 是否仅在类引用向量时复制到其他内存区域并调整大小?
完全,这样编码不是一个好主意吗?
c++ - 为堆栈和堆指针重新分配内存
我开发了一个阻塞队列类如下
我希望该类尽可能通用,因此我使用了一个 void 指针,该指针在元素添加到队列时分配,并在从队列中删除时释放。
如果队列为空,take()
函数会一直等待,m_condition
直到添加新元素。
在释放元素之前,必须给出一个指针event
来复制元素的内容。
为了确保给定的指针具有正确的大小来复制元素的内容,我重新分配了指针及其大小。
我遇到的问题是它不允许传递函数的语言环境变量,因为它是在堆栈上分配的。
所以如果我做这样的事情
我会invalid old size
在 realloc 上出错。
因此,如果我传递一个空指针或一个堆分配的变量,它会起作用,但如果我传递一个堆栈变量地址,它就不会。
有没有办法允许将堆栈变量地址传递给take()
函数?
c++ - 更改保持原始指针指向其字段的对象的地址
我想重新分配一个具有自引用的类,名为CarJoker
.
这里的“重新分配”意味着 = 更改对象的地址。
CarJoker
这种技术对于在可调整大小的连续数组(例如池)中制作每个生命实例是必要的。
我考虑使用std::move
,但它不能CarJoker::wheels
以我希望的方式移动。
( MCVE )
用std::move
,car2.wheels[0]
表示&car1.wa
不是&car2.wa
如我所愿。
我知道原因,但这不是我的目标,我不知道解决它的优雅方法。
我可怜的解决方法
这是一种不优雅的方式(MCVE):-
缺点:-
1. 很脏。
2. 我必须reIni()
为每个在池中存在此类症状的类创建一个特殊名称函数 ( )。我的池也必须识别该功能(例如,使用模板或虚拟功能注册)。
我可怜的解决方法2
我会工作,但我觉得这样的解决方法很疯狂。
该限制增加了编码人员的陷阱。
如果wheels
碰巧需要缓存计算昂贵的结果,现在getWheels()
经常调用会很昂贵。