【发布时间】:2022-01-10 06:14:37
【问题描述】:
我们必须在进程之间共享大量编译时已知数据。是否可以放入共享库的 .rodata 部分?这样做的实际步骤是什么?
【问题讨论】:
-
那么为什么不直接使用普通文件呢?
-
@KamilCuk 参与进程之间的总内存消耗。
我们必须在进程之间共享大量编译时已知数据。是否可以放入共享库的 .rodata 部分?这样做的实际步骤是什么?
【问题讨论】:
是否可以放入共享库的 .rodata 部分?
是的。
这样做的实际步骤是什么?
如果您声明数据 const,编译器应该已经为您完成。
如果该情况尚未发生,请向 MCVE 提出单独的问题。
或者您的意思是:“我有一个数据文件,我想将其 逐字 包含到我的 foo.so 中,而无需先将该数据转换为 C 样式的数组并对其进行编译? "
在这种情况下,这样做:
// foo.S
.globl foo_data
.section .rodata
foo_data:
.incbin "foo.data"
编译 foo.S 并将其链接到您的共享库中。
【讨论】:
foo_data标签。在C++ 中,您将使用extern const char foo_data[];,然后使用例如foo_data[0] 访问它的第一个字节。