malloc 在堆上说 4 个字节是否有意义,因为 malloc 在内部通常会将其四舍五入到 8 位系统上的 32 字节边界,对于 64 字节系统将其四舍五入为 16 字节以供内部使用。
我需要分配一个存储一位数或两位数的字符串。因此,我最多需要 3 个字节(2 个用于两位数,1 个用于"\0"字符以终止我的字符串)。想知道做 malloc 3 是否有任何好处,我是否应该做 8 的 malloc?
有什么想法吗?
分配您需要的内容,无需担心内存使用量。
智能内存分配器将具有单独的内存池,用于分配小块。
例如,内存分配器可能具有单独的内存池,用于分配小于 8 个字节的项目。
是的,只问你需要的东西绝对有意义。
分配器(malloc
,new
,VirtualAlloc
或你有什么)可能总是填充你的分配,但一般来说,这不是你关心的问题。
无论如何,由于混合方案/不同大小的不同池,它可能比较小的分配更能填充更大的分配。
无论如何,除非您有很多分配,否则不要担心开销,因此分配器开销可能是压垮骆驼的稻草。
此外,分配器可能会被更改或简单地替换(为了更好的空间/时间性能、调试体验、容错,只是因为),你真的不想泄露最后一个分配器如何工作的所有细节在你的代码中。
特别是你不想特意去对抗任何可能的改进,因为更好地调整你的用例。
最好请求所需的大小,而不是更大的数量,也可以由*重复数据删除器回答
如果 OP 发现将来需要分配 0
字节,则有一个重要的例外。
在这种情况下,像 malloc(0)
这样的分配器可能会返回 NULL
或指针 - C 规范允许其中任何一个。 这可能会混淆或破坏专门需要这两者之一的后续代码。 因此,当代码需要分配 0
字节时,请考虑返回 malloc(1)
或 NULL
,而不是将其留给 malloc(0)
。