由于脚本的原因,我有一个巨大的数组。它基本上是一个转换为数组的图像文件。
我可以将主体定义为宏或将其放入标头中的const类型。如果我把它设置为const,那么内存寿命是多少?它是否适用于整个计划?它是否会持续使用它的范围,就像在函数中一样?使用宏是一个更好的选择吗?
答案 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)
如果数组是在头文件中定义的,那么该数组将具有全局范围,只要应用程序持续存在,它就会存在。
请注意,如果多次包含该标头,则可能会收到链接器错误,指出您在多个位置具有相同的符号/名称。如果数组是静态的,那么每个源文件中都包含该数组的副本。
如果您将数组定义为宏,它将根据您使用该宏的位置生存,并且您将在每个使用该宏的位置获得该数组的副本 - 听起来不是一个好的解决方案但是数组非常小的简单情况。