[讨论]C语言字符数组和指针数组存字符串占用空间大小比较

2019-12-12 18:24发布

如下的程序,我要存储9个字符串,下面的方式都可以实现,但是发现采用指针数组时系统还额外占用了36字节RAM,这么看来直接采用字符数组的方式更好了?

单从占用空间大小来看的话,大家讨论下我理解的对不?

  1. const char Planets[][8]= {"mercury","venus","earth","mars","jupiter","saturn","uranus","neptune","pluto"};
  2. const char *pPlanets[] = {"mercury","venus","earth","mars","jupiter","saturn","uranus","neptune","pluto"};
  3. int sizea=0;
  4. int sizeb=0;

  5. int main(void)
  6. {
  7.   sizea=sizeof(Planets);
  8.   sizeb=sizeof(pPlanets);

  9.   sizea=Planets[0][0];
  10.   sizeb=pPlanets[1][0];
  11.   
  12.   while(1);
  13. }
复制代码

仿真图片如下:
2019-03-07_124249.png (133.41 KB, 下载次数: 0) 下载附件 2019-3-7 13:31 上传
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
落叶知秋
1楼-- · 2019-12-13 00:14
 精彩回答 2  元偷偷看……
takashiki
2楼-- · 2019-12-13 05:45
你再试试
  1. const char * const pPlanets[]
复制代码
guxingganyue
3楼-- · 2019-12-13 10:21
落叶知秋 发表于 2019-3-7 14:02
const char *pPlanets[] 中的pPlanets是个指针变量,只不过是指向了一个常数,指向的内容不可改,但指针本 ...

应该是,加入const后直接flash寻址了,不加的话全部放到了RAM中
guxingganyue
4楼-- · 2019-12-13 11:54
takashiki 发表于 2019-3-7 14:17
你再试试

加入const后就和字符数组形式一样了,都放到了flash了
嗯,谢谢指点,以后类似这种操作都加2个const,这样才完美

2019-03-07_143008.png (69.32 KB, 下载次数: 0)

下载附件

2019-3-7 14:33 上传

guxingganyue
5楼-- · 2019-12-13 12:58
takashiki 发表于 2019-3-7 14:17
你再试试

编译后看了RAM消耗情况,加入const后RAM确实小了36B。

为啥去掉const后readonly data会增加一个字节呢,这个多出的字节给谁用了呢?

2019-03-07_161038.png (128.05 KB, 下载次数: 0)

下载附件

2019-3-7 16:16 上传

takashiki
6楼-- · 2019-12-13 14:01
 精彩回答 2  元偷偷看……

一周热门 更多>