问题标签 [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.

0 投票
5 回答
24815 浏览

optimization - 内存分配的时间复杂度

使用new、malloc等动态内存分配的时间复杂度是多少?我对如何实现内存分配器知之甚少,但我认为答案是它取决于实现。因此,请回答一些更常见的案例/实现。

编辑:我隐约记得听说堆分配在最坏的情况下是无限的,但我对平均/典型情况真的很感兴趣。

0 投票
16 回答
14893 浏览

c - 我可以在 C 中分配特定数量的位吗?

我正在尝试存储大量在运行时确定的布尔信息。我想知道最好的方法可能是什么。

我目前一直在尝试使用以下方法分配内存:

pStatus = malloc((<number of data points>/8) + 1);

认为这会给我足够的工作。然后我可以使用数组表示法中的指针引用每个布尔值:

pStatus[element]

不幸的是,这似乎效果不佳。首先,我很难将内存初始化为整数值0。这可以使用memset()吗?不过,我认为这不会影响我在尝试访问时崩溃的原因pStatus[element]

我也不完全相信这种方法是最好的方法。我真正想要的本质上是一个反映布尔值状态的巨大位掩码。我错过了什么吗?

0 投票
4 回答
2803 浏览

c++ - 每当调用 malloc/free 时输出到 stderr

使用 Linux/GCC/C++,我想在调用 malloc/free/new/delete 时向 stderr 记录一些内容。我正在尝试了解库的内存分配,因此我想在运行单元测试时生成此输出。我使用 valgrind 进行内存泄漏检测,但我找不到一个选项来让它只是日志分配。

有任何想法吗?我正在寻找最简单的解决方案。重新编译库不是一种选择。

0 投票
2 回答
707 浏览

windows - 为什么 malloc 会覆盖 RSP 和 RSP+8?

您可以在此处阅读有关 64 位调用约定的信息。x64 函数应该自行清理,但是,当我从 .asm 调用 malloc 时,它会覆盖 RSP 和 RSP+8 处的值。这似乎非常错误。有什么建议么?

0 投票
6 回答
28879 浏览

c - char x[256] 与 char* = malloc(256*sizeof(char));

最近有人在我正在使用的一段代码中向我指出

我的印象是这种设置数组的方式与使用

并且这两种方式都需要使用free()。我错了,如果是这样,有人可以用低级的术语解释一下有什么区别吗?

0 投票
2 回答
16082 浏览

c - 如何释放 C 结构?

给定一个结构,例如

为什么下面的代码(在 iPhone 上运行的 Objective-C 类的上下文中)会抛出“非对齐指针被释放”异常?

注意我的超级目标是使用具有许多向量数学函数的 C 库,因此需要找到一些可行的方法来混合 C 和 Objective-C

0 投票
12 回答
25203 浏览

c - 为什么 malloc 分配的字节数与请求的不同?

我有这段代码

这不应该打印最后分配的块大小(16 或 1024)吗?它改为打印 24 和 1032,因此分配的内存量似乎有 8 个额外字节。

我的问题是(在制作这个测试用例之前)我malloc()在一个函数(1024 字节)中执行,并返回分配的结果。当检查函数返回的块大小时,我得到 516 个块......我不明白为什么。我想这可能是对分配的缓冲区进行一些处理后发生内存损坏的原因:)

编辑:我已经看到如何从 C 中的指针获取数组的大小?似乎问同样的事情,抱歉重新发布。

我已将示例重做为更具体的代码:

输出是

根据上面的帖子大于1024。我错了吗?

0 投票
5 回答
37039 浏览

c - C中的可变大小数组与calloc

关于动态内存的讨论:“C 指针和动态内存简介”

作者指出:

像这样的内存块可以有效地用作更灵活的数组。这种方法实际上在现实世界的 C 程序中更为常见。它也比“可变大小数组”更具可预测性和灵活性

他所说的内存块类型是这样的:

然后使用另一个指针遍历数组:

我的问题是这种方法比像这样的标准可变大小数组更好吗?:

或动态:

作者并没有真正解释为什么我应该更喜欢前一种方法而不是后者。或者更具体地说:它如何更“可预测和灵活”?

0 投票
12 回答
28300 浏览

performance - 内存分配/释放瓶颈?

在典型的实际程序中,内存分配/释放有多少瓶颈?欢迎来自性能通常很重要的任何类型的程序的答案。malloc/free/garbage 收集的体面实现是否足够快以至于它只是少数极端情况下的瓶颈,或者大多数性能关键软件会从尝试降低内存分配量或拥有更快的 malloc/free/ 中显着受益垃圾回收实现?

注意:我在这里不是在谈论实时的东西。我所说的性能关键是指吞吐量很重要但延迟并不一定的东西。

编辑:虽然我提到了 malloc,但这个问题并不是针对 C/C++ 的。

0 投票
4 回答
9177 浏览

c++ - 你有没有通过使用 boost::pool 获得显着的加速?

我在一些地方玩过 boost::pool ,在我看来,我正在用大量的对象“搅动”严重地敲打堆。通常我使用boost::object_pool, 或boost::pool_alloc作为 STL 模板参数。然而,结果始终是性能几乎没有变化,或者显着恶化。

我很想知道它有什么成功的故事。

我应该在分析输出中寻找哪些可能表明 boost::pool 可能有帮助的东西?

改进旧的 malloc 真的很难吗?