const与宏观和内存寿命

时间:2011-03-11 17:25:03

标签: c++ c

由于脚本的原因,我有一个巨大的数组。它基本上是一个转换为数组的图像文件。

我可以将主体定义为宏或将其放入标头中的const类型。如果我把它设置为const,那么内存寿命是多少?它是否适用于整个计划?它是否会持续使用它的范围,就像在函数中一样?使用宏是一个更好的选择吗?

2 个答案:

答案 0 :(得分:9)

我将数组定义移动到源文件中(可能单独使用):

// bitmap.cpp
char const my_bitmap[] = {
   0x12, 0x34, 0x56, // lots of data here...
};

然后写一个只是有一个extern声明的标题:

//bitmap.h
extern char const my_bitmap[];

这为所有代码(包括标题)提供了对数据的访问权限,但确保您只有一个数据副本供每个人使用。它还避免了无意义地重新编译代表位图的代码,对于每个需要访问数据的文件都是如此。

答案 1 :(得分:2)

如果数组是在头文件中定义的,那么该数组将具有全局范围,只要应用程序持续存在,它就会存在。

请注意,如果多次包含该标头,则可能会收到链接器错误,指出您在多个位置具有相同的符号/名称。如果数组是静态的,那么每个源文件中都包含该数组的副本。

如果您将数组定义为宏,它将根据您使用该宏的位置生存,并且您将在每个使用该宏的位置获得该数组的副本 - 听起来不是一个好的解决方案但是数组非常小的简单情况。