首页 > 试题广场 >

如果有多处代码都需要使用同一个字符串,下列哪种方式内存开销最

[单选题]
如果有多处代码都需要使用同一个字符串,下列哪种方式内存开销最小
  • #define STR_TITLE  "很长的字符串";
  • const WCHAR* pszTitle ="很长的字符串";
  • const char* pszTitle = "很长的字符串";
  • CString strTitle = _T("很长的字符串");
<p>A.define多处展开,会占多份内存</p><p>C.保存在.rodata区,只有一份拷贝</p><p>BD不清楚,但是还是选对了==</p><p><br></p>
发表于 2020-09-29 23:49:55 回复(1)
A选项我认为存在问题,因为宏定义只存在于编译期,不管它替换文本再多此阶段都是不占用内存的,申请内存是运行期的事情,运行期已经没有宏的概念了,如果把占用内存的锅甩给宏是不是有点牵强了?
B、D选项的问题都是一样的,能用基本数据类型就用基本数据类型去管理字符串,否则都不可能是最小内存开销。
C选项相对B和D内存开销是最小的,这点毋庸置疑。
编辑于 2021-11-06 18:33:02 回复(1)
请给位大神给出意见
发表于 2020-09-13 11:55:32 回复(3)
A B 均是编译时拷贝多份,CString类明显没有只存字符串占用内存小,所以选C
发表于 2020-11-10 14:52:23 回复(0)
A是文本替换,n*sizeof(字符串) B是字符串指针,字符串存储是wchar类型,占用比char大 C是字符串指针,字符串指针是char类型,占比比wchar小 D是字符串,字符串占用空间比指针普遍要大 总结:A=D>B>C
发表于 2023-03-10 17:21:19 回复(0)
同样的字符串常量虽然会拷贝多份,但是编译后内存中只有一份,使用是都是传递常量地址,所以不存在变量占据空间吧。 char const *p; p作为变量不是也会占据一定空间?
发表于 2021-05-14 08:11:56 回复(1)
指针只需要4字节
发表于 2022-06-29 20:43:14 回复(0)
#define最后是没有分号的,所以A错。#define 宏仅仅是代码展开,在多个地⽅进⾏字符串替换,不会分配内存。
D中CString由于在字符串的末尾,需要加上一个值为\0的字符,所以字符串实际占用的字节数比字符串的长度多1个字节。
C语言用 char 来表示一个8位 ANSI 字符,用wchar_t表示一个16位的Unicode字符。其中,ANSI 是单字节字符集,每个字符占一个字节。Unicode 是双字节字符集,每个字符占两个字节;
所以内存开销最小的就是C。


发表于 2023-08-02 11:29:22 回复(0)