use*_*963 5 c++ memory boolean
当我在dev cpp运行这个程序时,任务管理器说它大约是79 MB.使用gnu c ++ 4.7的代码表示它是79112千字节
#include<stdio.h>
const int N=10010,K=1010;
struct TPos
{
int charge;
bool ex;
TPos()
{
charge=1<<30;
ex=false;
}
};
TPos d[N][K];
int main()
{
while(1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是当ex parametr被评论时:
#include<stdio.h>
const int N=10010,K=1010;
struct TPos
{
int charge;
//bool ex;
TPos()
{
charge=1<<30;
//ex=false;
}
};
TPos d[N][K];
int main()
{
//while(1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它只有39536 KB.我认为布尔值应该使用一个字节.为什么它的尺寸加倍?
Bool是一个字节,但你在这里看到的是结构打包.
您的struct包含一个int,因此编译器会自动将结构与int的大小对齐,以确保它保证在数组中正确对齐.否则,数组的第二个元素将在不正确对齐的地址上使用int - 这可能会导致性能下降,甚至导致某些体系结构崩溃.
您可以使用特定于编译器的编译指示和属性显式关闭结构打包,但您不希望这样做.如果需要关注内存,请考虑使用数组结构而不是结构数组.
| 归档时间: |
|
| 查看次数: |
1030 次 |
| 最近记录: |