c - snprintf() 是否通过格式说明符使用根内存?
问题描述
例如,我在一个函数中有 10 个这样的调用,
snprintf(dest, sizeof(dest), "%s", "Hello World");
那么,"Hello World"
一共会在栈上存储十次(结果是 11+(1) bytes * 10 = 110 bytes)?
请让我听听你的想法。谢谢。
解决方案
字符串文字"Hello World"
具有“静态存储持续时间”。实际上,这意味着它不在“堆栈”上。该标准没有指定相同的字符串文字是否“折叠”到一个实例中。
从 C11 6.4.5 开始:字符串文字
- ...然后使用多字节字符序列来初始化一个静态存储持续时间和长度的数组,刚好足以包含该序列。...
7 如果这些数组的元素具有适当的值,则未指定这些数组是否不同。如果程序试图修改这样的数组,则行为未定义
“堆栈”在上面的引号中,因为该标准从未提及“堆栈”或“堆”或“ROM”。只有“自动”或“分配”或“静态”存储持续时间。大多数编译器确实具有概念的一对一映射。
推荐阅读
- javascript - React中图像上的CSS关键帧动画
- javascript - Express - POST 和 PUT 的 400 错误请求
- azure - Azure 数据工厂 - 如何使用空值初始化变量
- excel - VB循环代码根据另一个单元格值删除单元格范围
- pfsense - 路由问题?纳特问题?
- html - 如何在 Angular 中排除 nod_module 样式的 css?
- python - 如何使用 Sphinx 和 reStructuredText 从 Python 打印行打印“撇号”?
- python-3.x - ModuleNotFoundError:没有名为“sklearn.cluster._k_means”的模块 scikit-learn 0.22 vs 0.22.1
- django - 如何使用 django orm 获取简单的数据透视表?
- r - 如何从 R Highcharter 中删除“值”