定义全局常量的方法很少:define,static const,extern ......等。 消耗较少内存的是什么? 我的.pch文件中有很多常量。
答案 0 :(得分:4)
建议使用常量。除非你处于一个非常受内存限制的环境中,否则如果你不使用它就会浪费内存。框架充满了这样的常量。
然而,为了帮助理解:常量将为字符串本身使用内存,并为常量自己的存储使用一个指针大小的内存块 - 通常为4或8个字节。除非那是你不使用它,编译器或链接器能够删除它;如果常量是全局可访问的,则不太可能,如果它是文件范围(静态)常量,则更有可能。宏的内存使用也依赖于编译器/链接器,但可能超过常量 - 考虑到在宏处理之后,编译器会看到相同文字字符串的多次使用,可能在不同的文件中。
因此,除非你很好地了解你的编译器/链接器,并且它没有改变,否则你正在考虑可能性:
总之,如果使用字符串,常量可能会使用更少的内存,最多可以使用更多的内存,所以除非你受到很大的内存限制,否则不要担心它;或直到记忆成为一个问题。
答案 1 :(得分:1)
首先,我想说你的常量范围比它们消耗的内存更重要。
其次,取决于你的常量的内容,#define
这是一个预处理器动作可能是好的,因为它直接将结果注入你的代码。如果你对常量的使用很少,那就太好了。否则,在手中它都是一样的。因为它是const,所以你的对象将在运行时存储一次(或者取决于范围,每个类或每个对象一次)。
但实际上,除非你拥有数十万个变量,否则它不应该对记忆产生真正的影响。相信编译器可以处理它。
答案 2 :(得分:1)
extern将比静态消耗更少的内存,因为static使用导入的头文件为每个文件创建一个常量,extern为每个应用程序创建一个常量。