malloc在堆上说4个字节是否有意义,因为malloc内部通常会在32位系统上将其舍入为8字节边界,而对于内部使用则为64字节系统。
我需要分配一个存储单个或两个数字的字符串。因此,我需要最多3个字节(2个数字用于两个数字,1个用于'\ 0'字符来终止我的字符串)。想知道做一个malloc 3是否有什么好处,如果我应该做一个8的malloc?
有什么想法吗?
答案 0 :(得分:3)
分配您需要的内容,不要担心内存使用情况。
智能内存分配器将具有用于分配小块的单独内存池。
例如,内存分配器可能有一个单独的内存池,用于分配小于8个字节的项。
答案 1 :(得分:2)
是的,只有问你需要什么才有意义。
分配器(malloc
,new
,VirtualAlloc
或您拥有的东西可能总是填补您的分配,但一般而言,这不是您的关注。
无论如何,由于混合方案/不同大小的不同池,它可能比较小的分配更多的分配。
无论如何,除非你有很多分配,否则不要担心这些开销,所以分配器开销可能是打破骆驼背部的吸管。
此外,分配器可能会被更改或只是被替换(为了更好的空间/时间性能,调试体验,容错,只是因为),你真的不想泄漏所有细节如何最后一个分配器在你的代码中工作。
特别是您不想轻易克服因更好地调整用例而导致的任何可能的改进。
答案 2 :(得分:1)
最好请求*Deduplicator
所需的尺寸而不是更大的数量如果OP未来需要分配0
个字节,那么有一个重要的例外。
在这种情况下,像malloc(0)
这样的分配器可能会返回NULL
或指针 - C规范允许这样做。这可能会混淆或破坏后续代码,这些代码特别期望这两者之一。因此,当代码需要分配0
字节时,请考虑返回malloc(1)
或NULL
,而不是将其留给malloc(0)
。