这是我在一次采访中被要求分析的一段C代码。
int main() {
char *ptr = "hello";
return 0;
}
内存的哪一部分字符串“hello”被存储?
答案 0 :(得分:3)
这是特定于实现的,未由标准指定。您必须查阅特定编译器的文档以确定其放置位置。
通常,编译器将字符串文字放在只读数据段(如代码段)中。这允许使用可以共享的单个内存在程序中编码多个不同的字符串文字。这也是为什么尝试就地修改字符串文字是一个坏主意,因为这通常会因为写入只读段而触发分段错误。这不保证,但通常以这种方式实现。