gpt4 book ai didi

c++ - 来自任务管理器的实际内存与在 C++ 单链表中手动计算的内存差异

转载 作者:行者123 更新时间:2023-11-28 03:10:41 26 4
gpt4 key购买 nike

我为 100000000 个节点运行一个 C++ 单链表追加操作,节点每次都采用 0-10 之间的随机数,在 centos 64 位中,每个节点的大小为 16,因此它将是 1600000000 但根据显示的任务管理器每个节点 30.53mb。

node 类包含 int 数据和 node* next,仅此而已。

我的问题:

1.为什么会这样?

2.有什么具体的方法可以得到相等的大小吗?

最佳答案

分配的所有“ block ”内存都有开销,每次分配通常为 16-64 字节。

如果您连续进行两次内存分配,那么它们相距多远。例如。

char *a = new char;
char *b = new char;

std::cout << b-a << std::endl;

delete a;
delete b;

(是的,在别人指出之前:从技术上讲,这段代码是未定义的行为。但是在 x86-64 机器上,内存是一个平面内存模型,所以从一个指针中减去另一个指针应该给你之间的距离两个对象。标准不允许“不同分配的内存之间的差异”的原因之一是架构可能使用分段内存 a'la 16 位 OS/2,其中每个分配都有自己的段,并且段有它自己的基地址,用户模式应用程序不知道基地址,所以不可能使用这种技巧)

关于c++ - 来自任务管理器的实际内存与在 C++ 单链表中手动计算的内存差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18569191/

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