C语言中语句char *s = "Hello world";的字符串存储在哪个内存段?
C语言中
char *s = "Hello world";的字符串存储位置 "Hello world"这个字符串字面量会被存储在只读数据段(.rodata),属于程序静态存储区的一部分,和栈、堆是独立的内存区域。- 栈上只存放指针变量
s本身——也就是一个指向只读数据段中字符串首地址的内存地址值。 - 注意:只读数据段的内容是不可修改的,如果尝试通过
s去修改字符串的内容,会触发未定义行为(比如程序崩溃)。 - 堆是动态内存分配的区域(比如
malloc/calloc申请的内存),这里的字符串是编译期就确定的静态常量,所以不会存在堆上。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

