我想静态初始化巨大的(兆字节)uint8_t数组.
一开始我试过这个:
constexpr uint8_t arr[HUGE_SIZE] = { 0, 255, ... };
不幸的是,上面的编译时间很长(没有优化 - 大约30秒,优化 - 小时以上).
我发现如果我们使用c样式字符串初始化,编译时间可以减少到可以忽略不计(在优化关闭和开启情况下):
constexpr uint8_t arr[HUGE_SIZE + 1] = "\x00\xFF\x...";
这是C++中的好方法吗?我应该使用一些字符串文字来使上述赋值的两面类型相等吗?
如果数组非常大,请考虑使用实用程序直接从数组生成目标文件.例如,使用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)
| 归档时间: |
|
| 查看次数: |
1107 次 |
| 最近记录: |