小于 8 个字节的 malloc

malloc less than 8 bytes

本文关键字:malloc 字节 小于      更新时间:2023-10-16

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

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

有什么想法吗?

分配您需要的内容,无需担心内存使用量。

智能内存分配

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

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

是的,只问你需要的东西绝对有意义。

分配器(mallocnewVirtualAlloc或你有什么)可能总是填充你的分配,但一般来说,这不是你关心的问题。
无论如何,由于混合方案/不同大小的不同池,它可能比较小的分配更能填充更大的分配。

无论如何,除非您有很多分配,否则不要担心开销,因此分配器开销可能是压垮骆驼的稻草。

此外,分配器

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

特别是你不想特意去对抗任何可能的改进,因为更好地调整你的用例。

最好请求所需的大小,而不是更大的数量,也可以由*重复数据删除器回答

如果 OP 发现将来需要分配 0 字节,则有一个重要的例外。

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