内存中的字符串文字是什么? 堆栈/堆?
可能重复:
C字符串文字:他们去哪里?
我所知道的,
通常,指针必须由malloc()分配,并将分配给堆,然后由free()分配。
和
非指针(int,char,float等)将自动分配给堆栈,并且只要函数返回,就不会分配
但是,从以下代码:
#include <stdio.h>
int main()
{
char *a;
a = "tesaja";
return 0;
}
其中,将a
分配给? 堆栈还是堆?
字符串文字将在数据段中分配。 指向它的指针a
将被分配到堆栈中。
你的代码最终会被编译器转换成如下所示:
#include <stdio.h>
const static char literal_constant_34562[7] = {'t', 'e', 's', 'a', 'j', 'a', ' '};
int main()
{
char *a;
a = &literal_constant_34562[0];
return 0;
}
因此,你的问题的确切答案是: 既不 。 堆栈,数据,bss和堆都是不同的内存区域。 常量静态初始化变量将在数据中。
a
本身(指针)被定义为一个使用auto
存储类的局部变量(隐式地),所以它被分配到堆栈上(或者实现用于堆栈式分配的任何内存 - 一些机器,例如IBM大型机和第一个Crays,在正常意义上没有“堆叠”)。
字符串文字“tesaja”是静态分配的。 具体到哪里取决于实现 - 有些将其与其他数据放在一起,有的放在只读数据段中。 一些将所有数据视为读/写,并将所有代码视为只读。 由于他们希望字符串文字是只读的,因此他们将它放在代码段中。
链接地址: http://www.djcxy.com/p/79839.html上一篇: Where in memory are string literals ? stack / heap?
下一篇: Why is the use of alloca() not considered good practice?