小于 8 个字节的 malloc
malloc less than 8 bytes
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)
。
- 从不同线程使用int64的不同字节安全吗
- 如果没有malloc,链表实现将失败
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 在UNIX系统中使用DIR查找文件的字节大小
- malloc() 可能出现内存泄漏
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- std::当在256字节边界上写入整数时,流的奇怪行为
- 当比特(而不是字节)的顺序至关重要时的持久性
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 如何在文件中查找字节序列
- luaL_dofile在已知良好的字节码上失败,可以使用未编译的版本
- 字节到位运算符重载C++
- 在java中读取c++字节的位字段
- 当我尝试加载内核模块时,如何修复C++中的这个 malloc() 错误?
- 如果Malloc无法分配X字节,我应该使用Realloc还是再次使用Malloc?C++
- 小于 8 个字节的 malloc
- glibc malloc()字节总数
- 如果我对浮点变量使用malloc和calloc,并将其赋值为int,那么剩下的2个字节会发生什么呢?
- 为什么两个malloc之间有一行额外的8字节