c - 每行代码分配多少内存?

标签 c memory

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/

相关文章:

c++ - 可以在 C++ 中优化掉未使用的数据成员吗

C - 如何将数组指针设置回第一个内存字节

c - 运算符的执行顺序

c - strcpy 的替代品?或者修复程序中的strcpy?

android - 如何处理android中 Activity 之间的内存

c - 类型的大小和内存分配

编译器警告 : Initialization incompatible pointer type

在C编程中将 float 转换为整数

c++ - UTF-8 到宽字符转换

architecture - 多个 CPU 可以同时写入同一个 RAM 位置吗?