C++中const char数据大小困惑及ASCII图存储容量疑问
C++字符串存储与ASCII艺术大小计算解答
关键结论
const char与普通char内存占用完全一致,都是1字节;const修饰符仅做编译期只读约束,不会增加任何存储开销。- 所有ASCII字符(包括
#、空格、字母等)单个存储大小都是1字节,字符内容不影响占用空间。 - 你计算的单张图输出内容(40行×78字符)为3120字节,但编译后程序中存储这些字符串字面量时,每个字符串会多占1字节的
\0终止符;若算上endl输出的换行符,运行时总输出字节数会略有增加。
细节说明
const char的本质const char只是带只读属性的char类型,大小仍为1字节。你代码中的字符串字面量(如"#############################################################################")会被编译器存储为以\0结尾的const char数组,这个\0是字符串结束标记,会额外占用1字节。字符内容不影响存储大小
ASCII字符集内的所有字符(0-127范围)在C++中均以单字节存储,无论字符是#、空格还是其他可打印字符,单个字符的内存占用都是1字节,和字符本身的内容无关。const修饰无存储开销const是编译期的类型修饰,仅用于限制对数据的修改操作,不会在二进制文件中为数据增加任何额外的字节,完全不影响程序的最终大小。存储与输出的字节数差异
- 编译后存储:每个78字符的字符串字面量占79字节(78个字符+1个
\0终止符),40行总计40×79=3160字节(约3.09KB)。 - 运行时输出:若使用
endl,每行会额外输出1个换行符\n,总输出字节数为40×(78+1)=3160字节;如果不需要额外换行,可改用"\n"嵌入字符串,或去掉endl,此时输出字节数就是你计算的3120字节。
- 编译后存储:每个78字符的字符串字面量占79字节(78个字符+1个
内容的提问来源于stack exchange,提问作者Shadow7711
相关产品推荐
相关产品推荐

