gpt4 book ai didi

c - 两种分配方式有什么区别?

转载 作者:行者123 更新时间:2023-12-03 01:36:23 24 4
gpt4 key购买 nike

我想测试当我请求24M内存时操作系统分配了多少内存。

    for (i = 0; i < 1024*1024; i++)
ptr = (char *)malloc(24);

当我这样写时,我从 top 命令中得到 RES is 32M。

    ptr = (char *)malloc(24*1024*1024);

但是当我做一点改变时,RES 是 244。它们之间有什么区别?为什么结果是244?

最佳答案

分配器有自己的关于簿记的数据结构,也需要内存。当您分配小块时(第一种情况),分配器必须保留大量有关每个 block 的分配位置和长度的附加数据。此外,您可能会在 block 之间获得未使用的内存间隙,因为 malloc 需要返回充分对齐的 block ,通常在 8 字节边界上。

在第二种情况下,分配器只为您提供一个连续的 block ,并仅为该 block 进行簿记。

始终要小心大量的小分配,因为簿记内存开销甚至可能超过数据本身的量。

关于c - 两种分配方式有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11339913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com