gpt4 book ai didi

c++ - #define 和 const 的分配

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:27:07 24 4
gpt4 key购买 nike

假设我有一个宏

#define MSG "输入你的名字"

和一个常量

const char* const msg = "输入您的姓氏"或者const std::string msg = "输入您的姓氏"

在同一个程序中。

现在,msg 字符串文字将有一个内存位置,该位置将被程序中的每个 msg 引用。

但这同样适用于 MSG,即 MSG 的每次出现都指代相同的字符串文字,还是实际上为每次出现创建了不同的字符串文字?

我的猜测是,由于宏是由预处理器处理的,因此可能会创建重复的字符串文字(不是 100% 确定)。真的吗?我确信如果它是整数类型,那么重复将无关紧要。

我的问题是针对内存中的存储,但也欢迎其他方面的问题。

换句话说,假设我使用了 100 次 msg,但是使用的内存是恒定的,但是如果 MSG 使用了 100 次,内存使用率是恒定的还是 100 次?

最佳答案

如果字符串在二进制文件中重复 100 次,则二进制文件在内存中的大小会更大 - 但不会影响已用堆的数量。

至于字符串是否会使用#define 重复 100 次?是的,它肯定会,如果您查看源代码的预处理器输出,您会看到这一点。但是,某些编译器可能会在后面的步骤中删除重复项(我假设是链接)。此功能称为字符串池,MSVC 引用在这里:

http://msdn.microsoft.com/en-us/library/s0s0asdt(v=vs.110).aspx

关于c++ - #define 和 const 的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16459721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com