char *str1 = "warning";
char str[] = "warning";
char str3[] = {'c', 'a', 't'};
char *str4[] = {"warning", "program"};
char *str5[2][20] = {"waring", "program"};
我认为第二行代码应该分配 8 个字节的内存,但正确答案是 16 个字节。为什么?
最佳答案
这取决于你所说的“分配”是什么意思;从 malloc()
的意义上说,这些方法都没有进行任何基于堆的动态分配。
如果您的意思是“堆栈上保留了多少空间”,那么第二行的答案很可能是 8,但是这取决于您的平台和编译器。例如,编译器可能决定将所有堆栈变量对齐到 16 字节边界。
当然,为了初始化str
,还需要至少8字节的静态程序空间来存储字符串文字"warning"
。编译器可能足够智能,可以发现您在多个地方使用了相同的字符串文字,也可能不会。同样,视情况而定。
唯一不依赖于编译器的是 sizeof(str)
应始终为 8
。
关于c - 每行代码分配多少内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6088612/