我了解每种方法的工作原理,但我很好奇其中一种实际上在内存方面是否更有效。 #define 似乎一直在嵌入式 C 世界中使用,但我想知道它在大多数情况下是否真的有理由超过 const。
如果一个比另一个更有效,有没有人有办法测试和证明这一点?
最佳答案
让我们把 #define
放在一边,因为它并不真正存在于您的程序中。预处理器获取您的宏并在编译器发现它们之前展开它们。
以下来源:
#define X 42
printf("%d", X);
实际上是以下程序:
printf("%d", 42);
所以你要问的是,它占用的内存是否多于或少于:
const int x = 42;
printf("%d", x);
这是一个我们无法笼统地完全回答的问题。
一方面,值 42
需要存在于您的程序某处,否则执行它的计算机将不知道该做什么。
另一方面,它既可以在您的程序中进行硬编码,经过优化,也可以在运行时安装到内存中,然后再次取出。
无论哪种方式,它都需要 32 位(它可能不是 32 位)并且您如何将它引入您的程序并不重要。
任何进一步的分析都取决于准确地您对值的处理方式。
关于c++ - const 使用的内存通常比#define 多还是少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27627547/