我想使用static unsigned char
数组将包含资源文件(例如图标,...)的.zip文件编译到我的可执行文件中。我在这里看过,静态字符数组只能支持[0..65535]的索引范围,这会将我限制在64k。但我不确定这对于当前的C ++编译器是否仍然适用?作为旁注,显然我根本不会在我的程序中使用索引到数组中,而只使用它的地址。
数组内容示例:
xxd -i example
unsigned char example[] = {
0x4c, 0x69, 0x6e, 0x75, 0x78, 0x20, 0x66, 0x78, 0x2d, 0x38, 0x33, 0x32,
0x30, 0x20, 0x34, 0x2e, 0x39, 0x2e, 0x31, 0x31, 0x2d, 0x31, 0x2d, 0x41,
0x52, 0x43, 0x48, 0x20, 0x23, 0x31, 0x20, 0x53, 0x4d, 0x50, 0x20, 0x50,
0x52, 0x45, 0x45, 0x4d, 0x50, 0x54, 0x20, 0x53, 0x75, 0x6e, 0x20, 0x46,
0x65, 0x62, 0x20, 0x31, 0x39, 0x20, 0x31, 0x33, 0x3a, 0x34, 0x35, 0x3a,
0x35, 0x32, 0x20, 0x55, 0x54, 0x43, 0x20, 0x32, 0x30, 0x31, 0x37, 0x20,
0x78, 0x38, 0x36, 0x5f, 0x36, 0x34, 0x20, 0x47, 0x4e, 0x55, 0x2f, 0x4c,
0x69, 0x6e, 0x75, 0x78, 0x0a
};
unsigned int example_len = 89;
答案 0 :(得分:1)
我在这里看过SO,静态字符数组只能支持[0..65535]的索引范围
C ++标准对数组的维度(静态或动态)没有这样的限制。您将在标准的[implimits]部分找到最低建议实施限制。您所指的限制可能是
字符串文字中的字符(连接后)[65 536]
字符串文字确实是一个静态数组,但是这个限制并没有扩展到数组声明。
适用的限制:
物体的大小[262 144]。
但当然,这些是最低 推荐的限制。一个实现可能支持更大的对象,我希望程序(特别是64位)支持更大的对象。您可以使用SIZE_MAX
宏在编译时查询此限制。
显然存在一些限制因为记忆不是无限的。并且实现可以选择限制甚至比在内存中更合适。例如,在Linux上,如果初始化源中的数据(而不是在运行时读取文件),则数据将存储在.data段中。此段的大小可能受内核选项的限制。您可以使用ulimit -d
找到当前限制。
如果您怀疑您的实现不能为大型可执行文件提供足够的空间,那么最好在运行时加载文件内容。