malloc如何分配小于4KB的内存
How malloc allocates memory less than 4KB?
如果malloc调用VirtualAlloc()函数来分配内存(分配最小4Kb),malloc如何为int分配4个字节?
malloc
以页面大小的倍数向操作系统请求内存(很明显,因为页面大小根据定义是分配的内存量),并将其以较小的块分发给您。
这与所有内存分配器的作用没有什么不同——事实上,在幕后使用malloc
的专用内存分配器(例如Boost.Pool
)又一次做到了这一点:它们通过malloc
分配更大的内存块,并将其分成更小的部分分发给您。
我正在开发的应用程序在内部使用Doug Lea的malloc.c实现(ftp://g.oswego.edu/pub/misc/malloc.c),它在许多平台上被广泛使用。
此实现从系统中获取内存,如果是Windows,则使用VirtualAlloc保留并提交64KB的块。然后,它使用各种算法和结构来尽可能有效地使用这种存储器。
我测试了2个字节的分配,从调试器中我看到它首先将其填充到4个字节,并将其放入SmallBins中——这是一种处理小内存分配的方法。最后,我看到这个分配的实际内存使用量是16字节。但这可能取决于平台。
相关文章:
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 从值小于256的uint16到uint8的Endian安全转换
- 将stl字符串缩小到小于15个字符的容量
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 为什么我只能在C++中使用可变长度数组分配小于 10 mb 的内存?
- 如何为字符串生成唯一但一致的 N 位哈希(小于 64 位)?
- sizeof(size_t) 可以小于 sizeof(int) 吗?
- C++:如何计算二叉树中其值模块高度小于 2 的节点数?
- unique_ptr < 0 或小于运算符做什么?
- C++模板元编程(版本小于 17,最好是 11)
- 从小于或等于某个 N 的数字列表中最小化或找到 n 个理想的子集和
- c++curl返回413请求实体过大,但是post大小远小于max大小
- 如何在随机数列表中查找大于或小于的元素
- GetWindowRect()返回的大小小于游戏的实际可见窗口的可能原因是什么
- 创建一个循环,该循环将输出大于零且小于 60(不包括 60)的所有 5 的倍数
- std::p artition 的问题,用于分离小于枢轴的元素
- 我可以写出小于 -0.5 两个 ulps 的常量表达式双精度吗?
- 数字小于机器精度的安全算术?
- 每个元素小于某个特定数字的子数组的总和
- malloc如何分配小于4KB的内存