gpt4 book ai didi

c++ - 内存去了哪里?

转载 作者:行者123 更新时间:2023-11-28 01:14:01 25 4
gpt4 key购买 nike

class Node
{
//some member variables.
};
std::cout<<"size of the class is "<<sizeof(Node)<<"\n";
int pm1 =peakmemory();
std::cout<<"Peak memory before loop is "<< pm1<<"\n";
for(i=0; i< nNode; ++i)
{
Node * p = new Node;
}
int pm2 =peakmemory();
std::cout<<"Peak memory after loop is "<< pm2<<"\n";

我认为 pm2-pm1 近似于 nNode * sizeof(Node)。但事实证明 pm2-pm1nNode *sizeof(Node) 大得多。内存去了哪里?我怀疑 sizeof(Node) 没有反射(reflect)正确的内存使用情况。

我已经在 Windows 和 Linux 上进行了测试。最后的结论是 Node * p = new Node; 会分配一个大于 sizeof(Node) 的内存,其中 Node 是一个类。

最佳答案

由于您没有指定运行的平台,这里有几种可能性:

  1. 分配大小:您的 C++ 实现可能以大于 sizeof(Node) 的单位分配内存,例如限制它做的簿记量。
  2. 对齐:分配器可能有一个返回地址与 2 的最小幂对齐的策略。同样,这可能会在一定程度上简化其实现。
  3. 开销:一些分配器,除了正在使用的内存之外,还有一些具有固定模式的填充以防止内存损坏;或分配器使用的一些元数据。

这并不是说这实际上 发生了。但它可以;它当然符合语言规范 (AFAICT)。

关于c++ - 内存去了哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59293288/

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