C如何处理本地字符串文字的内存?

时间:2012-09-08 08:37:04

标签: c memory-management

考虑这个功能:

void useless() {
   char data[] = "aaa";
}

从我学到的here开始,"aaa"字面生活到程序结束。但是,data[](由文字初始化)是本地的,因此它仅存在于函数的末尾。

内存被复制,因此程序需要4B用于文字,4B用于datasizeof(size_t)字节用于指针datasizeof(size_t)用于指针字面意思 - 这是真的吗?

如果文字具有静态存储持续时间,则第二次调用不会为本地文字分配新内存 - 这是真的吗?

2 个答案:

答案 0 :(得分:2)

   char data[] = "aaa";

这是不是字符串文字而只是一个数组。所以那里没有指针,只为data分配了内存。

  

如果文字具有静态存储持续时间,则不会分配新内存   对于第二次调用的本地文字

对于字符串文字,例如:char *s="aaa";来自标准:

  

2.13。 Sttring文字
        [...]普通字符串文字的类型为“n const char数组”和静态存储持续时间(3.7)

答案 1 :(得分:1)

这里没有指针变量。所有都有一个数组,这是4个字节。

编译器可能会也可能不会将文字本身存储在内存中;如果是的话,那就是另外4个字节 请注意,由阵列本身以外的任何内容占用的任何内存都取决于实现。

我不确定你的“第二次调用”是什么意思,但一般来说,当你创建一个数组时,它会占用一些大小...所以如果你创建两个具有相同文字的数组,编译器为两个数组分配空间(也许 - 或者也许不是 - 也为文字分配)。