malloc小于8个字节

时间:2015-01-14 17:25:38

标签: c++ c memory malloc

malloc在堆上说4个字节是否有意义,因为malloc内部通常会在32位系统上将其舍入为8字节边界,而对于内部使用则为64字节系统。

我需要分配一个存储单个或两个数字的字符串。因此,我需要最多3个字节(2个数字用于两个数字,1个用于'\ 0'字符来终止我的字符串)。想知道做一个malloc 3是否有什么好处,如果我应该做一个8的malloc?

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

分配您需要的内容,不要担心内存使用情况。

智能内存分配器将具有用于分配小块的单独内存池。

例如,内存分配器可能有一个单独的内存池,用于分配小于8个字节的项。

答案 1 :(得分:2)

是的,只有问你需要什么才有意义。

分配器(mallocnewVirtualAlloc或您拥有的东西可能总是填补您的分配,但一般而言,这不是您的关注。
无论如何,由于混合方案/不同大小的不同池,它可能比较小的分配更多的分配。

无论如何,除非你有很多分配,否则不要担心这些开销,所以分配器开销可能是打破骆驼背部的吸管。

此外,分配器可能会被更改或只是被替换(为了更好的空间/时间性能,调试体验,容错,只是因为),你真的不想泄漏所有细节如何最后一个分配器在你的代码中工作。

特别是您不想轻易克服因更好地调整用例而导致的任何可能的改进。

答案 2 :(得分:1)

最好请求*Deduplicator

所需的尺寸而不是更大的数量

如果OP未来需要分配0个字节,那么有一个重要的例外。

在这种情况下,像malloc(0)这样的分配器可能会返回NULL或指针 - C规范允许这样做。这可能会混淆或破坏后续代码,这些代码特别期望这两者之一。因此,当代码需要分配0字节时,请考虑返回malloc(1)NULL,而不是将其留给malloc(0)