【发布时间】:2020-03-24 05:57:33
【问题描述】:
我正在存储大量数据并希望优化内存。我感到困惑的是以下(编译64位):
char a[10] = {1,2,3,4,5,6,7,8,9,10};
long long int b[10] = {1,2,3,4,5,6,7,8,9,10};
vector<char> x = vector<char>(10,0);
vector<long long int> y = vector<long long int>(10,0);
cout << sizeof(a) <<" "<< sizeof(b)<< " " <<sizeof(x) <<" "<< sizeof(y)<< endl;
打印值 10 80 24 24。
1) char[10] 实际上只使用 10 个字节吗?它不应该使用 80 字节吗,因为在 64 位编译中,内存只能针对 64 位块进行寻址?
2)最后两行:为什么是24(3个字节?)仅仅是vector的结构包含24个字节的数据吗?
3) 包含 1000 个元素的字符向量是否与包含 1000 个元素的 long long int 向量使用相同的内存量?
【问题讨论】:
-
前两个是静态数组,内存是在栈上分配的。 Vectors 在堆上分配内存并指向它。数组的大小是指针的大小加上一些元数据