【发布时间】:2013-11-21 09:21:50
【问题描述】:
当我在 dev cpp 上运行这个程序时,任务管理器说它大约有 79 MB。使用 gnu c++ 4.7 的 Codeforces 说它是 79112 KB
#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;
}
但是当 ex 参数被注释时:
#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;
}
只有 39536 KB。 我认为布尔值应该使用一个字节。为什么要翻倍?
【问题讨论】:
-
您可以尝试 __attribute__((packed)) 看看它的外观(但这通常不是提高性能的好习惯)
-
如果您不需要
charge的所有 int 位,您甚至可以将内存需求减少到sizeof(int)。请看下面我的回答。 (也许一个或多或少的 2 的功率并没有太大的区别。)