例如,我在一个函数中有10个此类调用,
snprintf(dest, sizeof(dest), "%s", "Hello World");
然后,"Hello World"
是否会在堆栈中总共存储十次(结果为11+(1)字节* 10 = 110字节)?
请让我听听您的想法。 谢谢。
答案 0 :(得分:4)
字符串文字"Hello World"
具有“静态存储持续时间”。实际上,这意味着它不在“堆栈”中。标准未指定是否将相同的字符串文字“折叠”到一个实例中。
从C11 6.4.5:字符串文字
- ...多字节字符 然后使用序列来初始化静态存储持续时间和长度的数组 足以包含序列。 ...
7不确定这些数组是否是唯一的,只要它们的元素具有 适当的值。如果程序尝试修改这样的数组,则行为是 未定义
上面的引号中包含“堆栈”,因为该标准从未提及“堆栈”或“堆”或“ ROM”。只有“自动”或“已分配”或“静态”存储期限。大多数编译器确实具有概念的一对一映射。