为指向字符串文字的指针分配的内存

问题描述 投票:0回答:1

使用指针声明的字符串数组是否会像普通字符串数组一样浪费空间?

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

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

AFAIK,第二种情况“浪费”内存,因为第一个索引只需要 4,但分配了 7。和第一种情况一样吗?

arrays c pointers string-literals
1个回答
1
投票

不,对于指针数组,每个字符串仅分配其实际字符所需的字节数加上尾随的空值。

但是,权衡是指针本身占用内存;在现代 64 位计算机上通常为 8 个字节。

那么

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

通常会使用

2*8 + (3+1) + (6+1) = 
27 个字节,而

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

使用 14。

因此,如果您知道所有字符串都会非常短,或者它们都非常接近相同的长度,那么像第二种方法这样的二维数组将使用更少的内存。如果它们的长度不同,并且有些相对较长,那么指针数组将使用更少。

© www.soinside.com 2019 - 2024. All rights reserved.