1

考虑这个函数:

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

根据我在这里学到的知识,"aaa"字面意思一直持续到程序结束。但是,data[](由文字初始化)是本地的,所以它只存在于函数的末尾。

内存被复制,所以程序需要 4B 用于文字,4B 用于指向datasizeof(size_t)字节的指针datasizeof(size_t)文字的指针 - 这是真的吗?

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

4

2 回答 2

2
   char data[] = "aaa";

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

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

这适用于字符串文字,例如:char *s="aaa";从标准:

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

于 2012-09-08T08:47:59.157 回答
1

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

编译器可能会也可能不会将文字本身存储在内存中;如果是这样,那就是另外 4 个字节。
请注意,除数组本身之外的任何东西占用的任何内存都是依赖于实现的。

我不确定“第二次调用”是什么意思,但一般来说,当你创建一个数组时,它会占用一些大小......所以如果你用相同的文字创建两个数组,编译器会为两个数组(也许——也可能不是——对于文字也是如此)。

于 2012-09-08T08:43:56.140 回答