gpt4 book ai didi

c++ - 了解内存分配

转载 作者:太空狗 更新时间:2023-10-29 20:37:09 24 4
gpt4 key购买 nike

我试图了解 std::list 数据结构如何分配内存。我做了一个小测试程序

#include <cstdio>
#include <vector>
#include <iostream>
#include <string>
#include <list>

class MyClass
{
public:

MyClass();
~MyClass(){}

private:
std::list<unsigned char> numlist;
};

MyClass::MyClass()
{
numlist.push_back(1);
}

int main()
{

MyClass c; // instantiate
}

我在 valgrind 中运行了上面的代码片段

$valgrind --leak-check=full ./indepth 
==32330== HEAP SUMMARY:
==32330== in use at exit: 0 bytes in 0 blocks
==32330== total heap usage: 1 allocs, 1 frees, 24 bytes allocated

请帮助我理解为什么在这里分配了 24 个字节。

最佳答案

在不了解特定编译器及其选项的更多信息的情况下,很难给出明确的答案。但是对 push_back 的调用将为它创建的列表元素分配一个节点,并且该节点将有两个指针(一个用于下一个节点,一个用于前一个节点),以及一个 int 保存存储的值。要获取有关这些部分尺寸的详细信息,请运行此程序:

#include <iostream>

int main() {
std::cout << sizeof(int*) << ", " << sizeof(unsigned char) << '\n';
return 0;
}

这将告诉您指针有多大以及 int 有多大。

关于c++ - 了解内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35782828/

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