gpt4 book ai didi

c - 有没有办法知道全局变量和静态变量驻留在数据段(.data + .bss)内的位置?

转载 作者:行者123 更新时间:2023-11-30 18:03:08 28 4
gpt4 key购买 nike

我想将所有全局变量和静态变量转储到文件中,并在下一次程序调用时将它们加载回来。我想到的一个解决方案是将 .data 段转储到文件中。但 32 位机器上的 .data 段跨越 2^32 地址空间 (4GB)。变量驻留在该地址空间的哪一部分?我如何知道应该转储 .data 段的哪一部分?

在加载转储文件时,我猜想由于变量是通过数据段中的偏移量引用的,因此将整个转储 memcpy 到所谓的“变量区域”起点是安全的。如果我错了,请纠正我。

编辑

一个好的开始是 this question .

最佳答案

你的问题是如何找到数据段的开头和结尾。我不知道如何做到这一点,但我可以给你一些想法。

如果您的所有数据都是相对独立的(它们在同一模块中声明,而不是在单独的模块中),您也许可以在某种结构中声明它们,因此开头将是结构,末尾将是您将在结构之后声明的一些变量。如果我没记错的话,MASM 有一个“RECORD”指令或类似的指令,您可以使用它来将变量分组在一起。

或者,您可以声明两个附加模块,一个带有名为“beginning”的变量,另一个带有名为“end”的变量,并确保第一个模块先于其他模块链接,第二个模块则链接在其他一切之后。这样,这些变量实际上可能最终标记数据段的开始和结束。但我对此并不确定,我只是给你一个指示。

要记住的一件事是,您的数据将不可避免地包含指针,因此只有当您运行的操作系统能够保证您的程序始终加载到同一地址时,保存和加载所有数据才有效。如果没有,就忘记它吧。但如果你能有这个保证,那么加载数据应该可以。您甚至不需要memcpy,只需将读取操作的缓冲区设置为数据段的开头即可。

关于c - 有没有办法知道全局变量和静态变量驻留在数据段(.data + .bss)内的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8715010/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com