【发布时间】:2012-05-17 05:01:50
【问题描述】:
我希望有人能解释原因
#include <stdbool.h>
printf("size of bool %d\n", sizeof(bool));
printf("size of int %d\n", sizeof(int));
输出到
size of bool 1
size of int 4
我查看了http://pubs.opengroup.org/onlinepubs/009695399/basedefs/stdbool.h.html,这似乎表明 bool 本质上是 _Bool 的宏,当设置为 true 或 false 时,它实际上只是整数常量的宏。如果是整数,为什么大小不一样?
我之所以这么问,是因为调试一个我们没有为其分配足够内存的程序花费的时间太长了。
【问题讨论】:
-
只是好奇——如果
bool比你预期的小,你怎么没有分配足够的内存? -
@detly 好吧,老实说我们不确定。我们有一个
bool数组,它总是导致分段错误,直到我们将malloc(x*sizeof(bool))乘以malloc(4*x*sizeof(bool))这可能是完全不同的东西,但这解决了问题并让我想到了这个问题。 -
您在声明三重指针 - 您在什么级别分配
x*sizeof(bool)?对于前两个级别,即指向指针的指针,您必须分配sizeof(bool*),因为sizeof(bool*)可能不等于sizeof(bool)。 -
@birrtree 这很有趣。我们为每个级别分配了
x*sizeof(bool)。但是既然你提到了它,(我坐下来想一想)我们需要为指针分配内存,而不是为除最后一个级别之外的所有级别分配实际的bool。哇!正如我在您的回答中提到的,这非常有教育意义且很有帮助! -
是的,对于前两个级别,由于它们是指向指针的指针,因此您必须分配空间来存储指针,因此请使用
x*sizeof(bool*)之类的东西而不是x*sizeof(bool)。这样您就不必执行4*x*sizeof(bool)之类的操作,因为这只会在指针为 4 字节宽(32 位程序)的系统上为您提供帮助。在 64 位程序中,您会再次遇到内存崩溃。sizeof(bool*)将在 32 位或 64 位上正常工作。