假设我有一个宏
#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/