问题标签 [realloc]
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.
performance - 实现动态堆栈类型的最佳方法?还是我在滥用 realloc?
我正在使用一种没有本机堆栈类型的晦涩语言,所以我实现了自己的。现在,在网上阅读我发现了一些不同的方法来做到这一点。
这是我的实现(伪代码)
现在有些人说在弹出一个值后使用 realloc() 调用来调整堆栈的大小对性能不利,所以我有几个问题:
- 最好只使用 malloc 增长堆栈然后在程序结束时释放它?
- 要调整堆栈大小(推送),最好增加 4 个字节或更多?
- 通过在填充时分配的内存加倍来增加堆栈是最佳实践吗?
- 你对上面的代码有什么想法?
memory-management - 使用 gcc/linux 就地重新分配
有这样的事吗?我的意思是一些函数,如果可能的话,它会重新分配内存而不移动它,或者如果不可能的话,什么也不做。在 Visual C 中有 _expand 可以满足我的要求。有人知道其他平台的等价物,特别是 gcc/linux 吗?我最感兴趣的是在可能的情况下就地缩小内存(标准 realloc 可能会移动内存,即使它的大小减小,以防有人问)。
我知道没有标准的方法可以做到这一点,我明确要求依赖于实现的肮脏的hackish技巧。列出任何你知道在某处有效的东西。
c - 重新分配实现
我正在编写一个简单的基于链表的内存管理器,格式如下:
...Header|Block|Header|Block... 带有已使用和空闲列表。
如果要求 realloc() 函数减小块的大小,是否可以用新创建的块的标头覆盖一些尾随字节?我读过的文档表明这是“未定义的行为”,但应用程序是否依赖于仍然存在的数据?
realloc - 如果失败,realloc 会释放前一个缓冲区吗?
如果 realloc 失败并返回 NULL 是前一个缓冲区被释放还是保持不变?我没有在手册页中找到那条特定的信息,我很不确定该怎么做。如果内存被释放,那么双重释放可能会有风险。如果不是,则将发生泄漏。
c - 如果新大小更小,可以重新分配指针吗?
我想知道 C 或 C++ 标准是否保证在以较小(非零)大小调用 realloc 时指针不会更改:
基本上,操作系统可以自行决定,因为我们释放了一个大内存块,他想利用所有重新分配来对内存进行碎片整理,并以某种方式移动 ptr2 吗?
c - 为什么 Win32 HeapReAlloc() 会改变值?
我正在使用 win32 API 在 C 中编写一个应用程序。当我尝试使用 HeapRealloc() 函数扩大数组的大小时,它会更改数组中的当前值,而不是复制它们。我用来重新分配内存的代码:
这是断点时数组的状态。feed 数组显示当前数组状态。临时数组显示新的重新分配的数组状态(这是不同的)。
饲料数组:
feedArray http://www.freeimagehosting.net/uploads/526b0b2172.jpg
临时数组:
tempArray http://www.freeimagehosting.net/uploads/17858f2e7e.jpg
请帮忙.. :\
链接到MSDN上的功能说明
c - 由于内存导致重新分配失败时如何处理?
问题说明了一切,但这里有一个例子:
如何处理内存不足而不是 NULL 我的所有数据?
编辑 - 让我们假设可以做一些事情,例如在某处释放一些内存,或者至少告诉用户“你不能这样做 - 你内存不足”。理想情况下,我想留下分配在那里的东西。
c - malloc(0) 返回什么?
返回什么malloc(0)
?
答案是否相同realloc(malloc(0),0)
?
Linux GCC 的输出:
输出每次都在变化malloc(0)
。这是标准答案吗?除了学术研究之外,为什么会有人对获得这样的指针感兴趣?
编辑:
如果malloc(0)
返回虚拟指针,那么以下如何工作:
编辑:
以下代码为每次迭代输出“可能”。为什么它不应该失败?
c - realloc 移动内存块时如何更新其他指针?
realloc 参考说:
该函数可以将内存块移动到新位置,在这种情况下,将返回新位置。
这是否意味着如果我这样做:
如果 realloc 移动块,那么 cptr 可能会变得无效?
如果是,那么 realloc 是否以任何方式发出信号,它会移动块,以便我可以做一些事情来防止 cptr 变得无效?
c - 释放字符指针
我有一个在程序执行期间被多次调用的函数。在所述函数中,我有一个动态字符指针,我多次调整它的大小。
我的问题是:我需要在函数结束之前释放这个指针吗?
我还应该注意,我试图释放指针,但是,当我这样做时, gdb会给我警告。