问题标签 [malloc]
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.
optimization - 内存分配的时间复杂度
使用new、malloc等动态内存分配的时间复杂度是多少?我对如何实现内存分配器知之甚少,但我认为答案是它取决于实现。因此,请回答一些更常见的案例/实现。
编辑:我隐约记得听说堆分配在最坏的情况下是无限的,但我对平均/典型情况真的很感兴趣。
c - 我可以在 C 中分配特定数量的位吗?
我正在尝试存储大量在运行时确定的布尔信息。我想知道最好的方法可能是什么。
我目前一直在尝试使用以下方法分配内存:
pStatus = malloc((<number of data points>/8) + 1);
认为这会给我足够的工作。然后我可以使用数组表示法中的指针引用每个布尔值:
pStatus[element]
不幸的是,这似乎效果不佳。首先,我很难将内存初始化为整数值0
。这可以使用memset()
吗?不过,我认为这不会影响我在尝试访问时崩溃的原因pStatus[element]
。
我也不完全相信这种方法是最好的方法。我真正想要的本质上是一个反映布尔值状态的巨大位掩码。我错过了什么吗?
c++ - 每当调用 malloc/free 时输出到 stderr
使用 Linux/GCC/C++,我想在调用 malloc/free/new/delete 时向 stderr 记录一些内容。我正在尝试了解库的内存分配,因此我想在运行单元测试时生成此输出。我使用 valgrind 进行内存泄漏检测,但我找不到一个选项来让它只是日志分配。
有任何想法吗?我正在寻找最简单的解决方案。重新编译库不是一种选择。
windows - 为什么 malloc 会覆盖 RSP 和 RSP+8?
您可以在此处阅读有关 64 位调用约定的信息。x64 函数应该自行清理,但是,当我从 .asm 调用 malloc 时,它会覆盖 RSP 和 RSP+8 处的值。这似乎非常错误。有什么建议么?
c - char x[256] 与 char* = malloc(256*sizeof(char));
最近有人在我正在使用的一段代码中向我指出
我的印象是这种设置数组的方式与使用
并且这两种方式都需要使用free()。我错了,如果是这样,有人可以用低级的术语解释一下有什么区别吗?
c - 如何释放 C 结构?
给定一个结构,例如
为什么下面的代码(在 iPhone 上运行的 Objective-C 类的上下文中)会抛出“非对齐指针被释放”异常?
注意我的超级目标是使用具有许多向量数学函数的 C 库,因此需要找到一些可行的方法来混合 C 和 Objective-C
c - 为什么 malloc 分配的字节数与请求的不同?
我有这段代码
这不应该打印最后分配的块大小(16 或 1024)吗?它改为打印 24 和 1032,因此分配的内存量似乎有 8 个额外字节。
我的问题是(在制作这个测试用例之前)我malloc()
在一个函数(1024 字节)中执行,并返回分配的结果。当检查函数返回的块大小时,我得到 516 个块......我不明白为什么。我想这可能是对分配的缓冲区进行一些处理后发生内存损坏的原因:)
编辑:我已经看到如何从 C 中的指针获取数组的大小?似乎问同样的事情,抱歉重新发布。
我已将示例重做为更具体的代码:
输出是
根据上面的帖子大于1024。我错了吗?
c - C中的可变大小数组与calloc
关于动态内存的讨论:“C 指针和动态内存简介”
作者指出:
像这样的内存块可以有效地用作更灵活的数组。这种方法实际上在现实世界的 C 程序中更为常见。它也比“可变大小数组”更具可预测性和灵活性
他所说的内存块类型是这样的:
然后使用另一个指针遍历数组:
我的问题是这种方法比像这样的标准可变大小数组更好吗?:
或动态:
作者并没有真正解释为什么我应该更喜欢前一种方法而不是后者。或者更具体地说:它如何更“可预测和灵活”?
performance - 内存分配/释放瓶颈?
在典型的实际程序中,内存分配/释放有多少瓶颈?欢迎来自性能通常很重要的任何类型的程序的答案。malloc/free/garbage 收集的体面实现是否足够快以至于它只是少数极端情况下的瓶颈,或者大多数性能关键软件会从尝试降低内存分配量或拥有更快的 malloc/free/ 中显着受益垃圾回收实现?
注意:我在这里不是在谈论实时的东西。我所说的性能关键是指吞吐量很重要但延迟并不一定的东西。
编辑:虽然我提到了 malloc,但这个问题并不是针对 C/C++ 的。
c++ - 你有没有通过使用 boost::pool 获得显着的加速?
我在一些地方玩过 boost::pool ,在我看来,我正在用大量的对象“搅动”严重地敲打堆。通常我使用boost::object_pool
, 或boost::pool_alloc
作为 STL 模板参数。然而,结果始终是性能几乎没有变化,或者显着恶化。
我很想知道它有什么成功的故事。
我应该在分析输出中寻找哪些可能表明 boost::pool 可能有帮助的东西?
改进旧的 malloc 真的很难吗?