You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

指针式字符串字面量数组是否会像普通字符串数组一样浪费内存?

两种C语言字符串数组声明的内存浪费对比

先看两种声明的代码:

char* foo[] = { "bar", "foobar" };
char foo[2][7] = {"foo", "foobar"};

第二种声明的内存浪费原因

char foo[2][7]是固定大小的二维字符数组,它强制每个子数组都占用7字节内存。第一个字符串"foo"加上字符串终止符\0只需要4字节,但因为数组大小固定为7,剩下的3字节就被闲置了,这就是你提到的内存浪费。

第一种声明的内存情况

char* foo[]是指针数组,它的每个元素是一个指向字符串字面量的指针:

  • 指针数组本身占用的内存是「指针大小 × 元素个数」(32位系统每个指针4字节,64位是8字节),这里2个指针就是8或16字节;
  • 而每个字符串字面量是单独存储的:"bar"占4字节(3个字符+1个\0),"foobar"占7字节(6个字符+1个\0),都是按需分配,没有多余的闲置空间。

所以第一种方式不会出现第二种那样的内存浪费,它不会强制所有字符串占用相同的固定内存,每个字符串只占用自身实际需要的字节数。

内容的提问来源于stack exchange,提问作者GrandeKnight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:24:52