C中的字符串的内存分配将在哪里发生
对于下面给出的C语句,我想知道内存分配将在哪里发生。
char* ptr="Hello";//ptr is a automatic variable
那么指针变量ptr将被分配到栈上,但是这个字符串“Hello”将被分配到哪里。 它是堆栈还是堆? 那么对于像char ptr [] =“Hello”这样的初始化语句的内存分配呢?
标准没有说(它不知道“堆栈”,“堆”等)。 但实际上答案是:都不是。 字符串文字将被存储在数据部分中,通常是只读页面。
作为一个侧面说明,正如Als在评论中提到的那样,尝试修改字符串文字是未定义的行为。
在你的例子中使用静态字符串时,字符串没有真正分配。 它的空间由可执行文件本身完成,上面的赋值只是将“ptr”设置为该空间的地址。
我不确定这是否依赖于实现,但字符串通常位于受保护的内存中,因此您无法更改它......只能指向它。
在UNIX中,可以通过在可执行文件上使用“strings”命令来查看可执行文件中的静态字符串。
链接地址: http://www.djcxy.com/p/80221.html上一篇: Where will the memory allocation for a string in C will take place
下一篇: How does .NET framework allocate memory for OutOfMemoryException?