【问题标题】:Shared const data segment共享 const 数据段
【发布时间】:2022-01-10 06:14:37
【问题描述】:

我们必须在进程之间共享大量编译时已知数据。是否可以放入共享库的 .rodata 部分?这样做的实际步骤是什么?

【问题讨论】:

  • 那么为什么不直接使用普通文件呢?
  • @KamilCuk 参与进程之间的总内存消耗。

标签: linux shared-libraries


【解决方案1】:

是否可以放入共享库的 .rodata 部分?

是的。

这样做的实际步骤是什么?

如果您声明数据 const,编译器应该已经为您完成。
如果该情况尚未发生,请向 MCVE 提出单独的问题。

或者您的意思是:“我有一个数据文件,我想将其 逐字 包含到我的 foo.so 中,而无需先将该数据转换为 C 样式的数组并对其进行编译? "

在这种情况下,这样做:

// foo.S
    .globl foo_data
    .section .rodata
foo_data:
    .incbin "foo.data"

编译 foo.S 并将其链接到您的共享库中。

【讨论】:

  • 我正在考虑 c 样式的数组,但逐字包含二进制数据是一个非常有趣的想法。
  • 对不起,我对使用asm不是很熟悉,你能举个例子来说明如何从c++中的程序集示例中访问数据吗?
  • @zzz777 上面的例子给出了数据foo_data标签。在C++ 中,您将使用extern const char foo_data[];,然后使用例如foo_data[0] 访问它的第一个字节。
猜你喜欢
  • 1970-01-01
  • 2016-11-16
  • 2019-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 2013-01-22
  • 1970-01-01
相关资源
最近更新 更多