可能重复:
C字符串字面量:它们去哪儿了?
据我所知,
通常情况下,指针必须通过malloc()进行分配,并将其分配到堆中,然后通过free()取消分配;
而
非指针(int、char、float等)将自动分配到堆栈中,并在函数返回时取消分配。
但是,从以下代码可以看出:
#include <stdio.h>
int main()
{
char *a;
a = "tesaja";
return 0;
}
a
会被分配到堆还是栈中?
可能重复:
C字符串字面量:它们去哪儿了?
据我所知,
通常情况下,指针必须通过malloc()进行分配,并将其分配到堆中,然后通过free()取消分配;
而
非指针(int、char、float等)将自动分配到堆栈中,并在函数返回时取消分配。
但是,从以下代码可以看出:
#include <stdio.h>
int main()
{
char *a;
a = "tesaja";
return 0;
}
a
会被分配到堆还是栈中?
a
本身(指针)被定义为一个局部变量(隐式地)使用了auto
存储类型,所以它在堆栈上分配内存(或者实现中用于类似堆栈的分配的其他内存,例如IBM大型机和第一批Cray机器没有"stack" 的正常意义)。
字符串字面量"tesaja"是静态分配的。它将被分配到何处取决于实现方式——有些将它与其他数据放在一起,有些将它放在只读数据段中。有些少数把所有数据都视为可读/可写,所有代码都视为只读的。由于他们希望字符串字面量是只读的,因此将其放在代码段中。