考虑这个功能:
void useless() {
char data[] = "aaa";
}
从我学到的here开始,"aaa"
字面生活到程序结束。但是,data[]
(由文字初始化)是本地的,因此它仅存在于函数的末尾。
内存被复制,因此程序需要4B用于文字,4B用于data
和sizeof(size_t)
字节用于指针data
和sizeof(size_t)
用于指针字面意思 - 这是真的吗?
如果文字具有静态存储持续时间,则第二次调用不会为本地文字分配新内存 - 这是真的吗?
答案 0 :(得分:2)
char data[] = "aaa";
这是不是字符串文字而只是一个数组。所以那里没有指针,只为data
分配了内存。
如果文字具有静态存储持续时间,则不会分配新内存 对于第二次调用的本地文字
对于字符串文字,例如:char *s="aaa";
来自标准:
2.13。 Sttring文字
[...]普通字符串文字的类型为“n const char数组”和静态存储持续时间(3.7)
答案 1 :(得分:1)
这里没有指针变量。所有都有一个数组,这是4个字节。
编译器可能会也可能不会将文字本身存储在内存中;如果是的话,那就是另外4个字节 请注意,由阵列本身以外的任何内容占用的任何内存都取决于实现。
我不确定你的“第二次调用”是什么意思,但一般来说,当你创建一个数组时,它会占用一些大小...所以如果你创建两个具有相同文字的数组,编译器为两个数组分配空间(也许 - 或者也许不是 - 也为文字分配)。