使用合理的编译时间静态初始化巨大的uint8_t数组

mkk*_*mkk 6 c++ arrays uint8t

我想静态初始化巨大的(兆字节)uint8_t数组.

一开始我试过这个:

constexpr uint8_t arr[HUGE_SIZE] = { 0, 255, ... };

不幸的是,上面的编译时间很长(没有优化 - 大约30秒,优化 - 小时以上).

我发现如果我们使用c样式字符串初始化,编译时间可以减少到可以忽略不计(在优化关闭和开启情况下):

constexpr uint8_t arr[HUGE_SIZE + 1] = "\x00\xFF\x...";

这是C++中的好方法吗?我应该使用一些字符串文字来使上述赋值的两面类型相等吗?

fuz*_*fuz 4

如果数组非常大,请考虑使用实用程序直接从数组生成目标文件.例如,使用GNU汇编程序,您可以执行以下操作:

    .section .rodata # or .data, as needed
    .globl arr
arr:
    .incbin "arr.bin" # assuming arr.bin is a file that contains the data
    .size arr,.-arr
Run Code Online (Sandbox Code Playgroud)

然后使用GNU汇编器汇编此文件并将其链接到您的程序.要在程序的其他位置使用此数据,只需将其声明为extern "C":

extern "C" const uint8_t arr[];
Run Code Online (Sandbox Code Playgroud)