sizeof中使用字符串字面量的存储特性与计算规则相关问题
字符串字面量在sizeof运算中的存储特性解答
规则适配性判断
你提到的「非初始化用途的字符串字面量会被存储到系统保护内存区域」的规则,在sizeof("example")这类场景下不成立。
字符串数组是否会被创建
如果整个程序中只有sizeof运算符用到了该字符串字面量,没有其他场景对它进行引用、取值等操作,那么这个char数组不会在运行时内存中被创建,甚至不会被写入最终生成的可执行文件中。
如果程序的其他位置也用到了同一个字符串字面量,那么该字面量会按通用规则存储到保护内存区域,但这是其他引用逻辑导致的,和sizeof的使用无关。
结果计算逻辑说明
sizeof是C标准定义的编译期运算符,仅当操作数为可变长数组时才会在运行时求值,其余场景全部在编译阶段完成计算。
字符串字面量的静态类型为固定长度的char[N],其中N等于字面量可见字符数 + 1(NUL终止符占用的1字节)。示例中的"example"包含7个可见字符,因此编译阶段编译器就会确定它的类型为char[8],直接将sizeof("example")替换为常量值8写入编译结果,不需要运行时访问字符串的实际存储内容,自然不需要为它分配内存也能得到正确结果。
内容的提问来源于stack exchange,提问作者user737163
相关产品推荐
相关产品推荐

