cap*_*ede 13 c heap stack pointers char
可能重复:
C字符串文字:它们去哪里了?
我所知道的,
通常,指针必须由malloc()分配,并将分配给堆,然后由free()取消分配;
和
非指针(int,char,float等)将自动分配给堆栈,并且只要函数返回就不会分配
但是,从以下代码:
#include <stdio.h>
int main()
{
char *a;
a = "tesaja";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
将a分配到哪里?堆栈还是堆?
uli*_*tko 16
您的代码最终会被编译器转换为以下内容:
#include <stdio.h>
const static char literal_constant_34562[7] = {'t', 'e', 's', 'a', 'j', 'a', '\0'};
int main()
{
char *a;
a = &literal_constant_34562[0];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
因此,您问题的确切答案是:既不是.堆栈,数据,bss和堆都是不同的内存区域.Const静态初始化变量将在数据中.
a本身(指针)被定义为一个局部变量(隐式地)使用auto存储类,因此它在栈上分配(或任何存储器中的实现使用堆栈状分配-一些机器上,比如IBM大型机以及第一Crays ,在正常意义上没有"堆叠").
字符串文字"tesaja"是静态分配的.具体取决于实现方式 - 有些将其与其他数据放在一起,有些则将其放在只读数据段中.一些人将所有数据视为读/写,所有代码都是只读的.由于他们希望字符串文字是只读的,因此将它放在代码段中.