关于#define是否多处申请内存的问题

alex_my 2012-10-16 11:52:48
在网上看到一段代码:

#define STRING "abcdefghijklmn\n"
const char string[]="abcdefghijklm\n";
...
printf(STRING); //为STRING分配了第一次内存
printf(string); //为string一次分配了内存,以后不再分配
...
printf(STRING); //为STRING分配了第二次内存
printf(string);
...

但在看《effective c++》item2时,发现里面写有:Like #defines,enums never result in that kind of unnecessary memory allocation.

到底是哪个正确呢。
...全文
1050 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yisikaipu 2012-10-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:][/Quote]

楼主是不是要问:可执行文件里有几个"abc\n",内存里有几个"abc\n"

int main()
{
const char s[]="abc\n";

printf("abc\n");
printf("abc\n");
printf("%s",s);
printf("%s",s);

return 0;
}
alex_my 2012-10-17
  • 打赏
  • 举报
回复
谢了。
[Quote=引用 5 楼 的回复:]
这个string是以个常字符串,所以在其生命周期中分配了一次。

引用 4 楼 的回复:

可能我没描述清楚吧,只是想确认下以下的一些问题,可能很低端,但我没在网上找到答案,才来发问的。
我想请教下:
printf(STRING); //为STRING分配了第一次内存
printf(STRING); //为STRING分配了第二次内存

这两块内存是同一块内存吗?应该不是吧。
……
[/Quote]
a707000646 2012-10-17
  • 打赏
  • 举报
回复
这个string是以个常字符串,所以在其生命周期中分配了一次。
[Quote=引用 4 楼 的回复:]

可能我没描述清楚吧,只是想确认下以下的一些问题,可能很低端,但我没在网上找到答案,才来发问的。
我想请教下:
printf(STRING); //为STRING分配了第一次内存
printf(STRING); //为STRING分配了第二次内存

这两块内存是同一块内存吗?应该不是吧。

printf(string); //为string一次分配了内存,以后不再分配
printf……
[/Quote]
alex_my 2012-10-17
  • 打赏
  • 举报
回复
可能我没描述清楚吧,只是想确认下以下的一些问题,可能很低端,但我没在网上找到答案,才来发问的。
我想请教下:
printf(STRING); //为STRING分配了第一次内存
printf(STRING); //为STRING分配了第二次内存

这两块内存是同一块内存吗?应该不是吧。

printf(string); //为string一次分配了内存,以后不再分配
printf(string); //这次是传个地址过来吗?应该是吧。

还没学会汇编调试,可耻的伸手了。


a707000646 2012-10-17
  • 打赏
  • 举报
回复
楼主 宏是什么东西你知道吗,这个宏在运行的时候是没有任何作用的
  • 打赏
  • 举报
回复
宏的话,在编译期就做了替换,只分配一次内存。
酱油党 2012-10-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
在网上看到一段代码:
C/C++ code

#define STRING "abcdefghijklmn\n"
const char string[]="abcdefghijklm\n";
...
printf(STRING); //为STRING分配了第一次内存
printf(string); //为string一次分配了内存,以后不再分配
...
printf(STRING)……
[/Quote]#define 只是简单的数据替换 , 其实际上 内存 就在静态变量区 , 那来的 一次分配二次分配的说法

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧