在这段代码中:
const char * str = "hello world";
如果我理解正确,指针是 4 或 8 个字节,我猜它会分配在堆栈上。但是“hello world”的内存分配和存储在哪里呢?
或者具体str
指的是什么?
在这段代码中:
const char * str = "hello world";
如果我理解正确,指针是 4 或 8 个字节,我猜它会分配在堆栈上。但是“hello world”的内存分配和存储在哪里呢?
或者具体str
指的是什么?
它没有分配。它通常存储在程序的代码段或堆栈中,这取决于编译器。无论哪种方式,它都指向一个以空字符结尾的字符数组。
本质上,它的编译就像您编写的那样:
const static char helloworld[12]
= {'h', 'e', 'l', 'l', 'o',' ','w', 'o', 'r', 'l', 'd', '\0'};
const char * str = helloworld;
该数组通常会放置在内存的某个只读部分中,可能靠近可执行代码。
根据定义的位置,str 将位于堆栈或全局内存空间中。
C 没有堆栈或堆。C 说这"hello world"
是一个字符串文字,并且字符串文字具有静态存储持续时间。