静态链接函数在同一台机器上运行时是否具有相同的指针值?

时间:2013-08-04 07:28:38

标签: c posix

我想为my postscript interpreter添加一个快速启动功能,以便它可以绕过长(-ish)初始化例程并立即开始执行用户程序。所以我设计了所有解释器内存都包含在内存映射文件中。进入该存储器的所有内部“指针”实际上是从基指针到存储器文件起始处的整数字节偏移。所以,我想我已经在设计中为此做好了准备。

我关注的是包含函数指针的运算符表。我想C本身在这方面没有给出任何保证,但是我可以假设对于相同可执行文件的单独运行,静态链接函数的函数指针将保持不变吗?这取决于虚拟内存的存在吗? POSIX是否解决了这个问题?

使用Cygwin,我似乎每次都获得相同的指针值。但是,测试永远不会证明没有错误

编辑:在我的辩护中,效率不是这里的唯一目标。封装内存使用是一个更大的目标(快速启动作为奶酪)。封装在调试方面也非常有用。

1 个答案:

答案 0 :(得分:1)

也许。不要依赖它。

Mat评论说,ASLR随机化了地址。因此,当它启用时,你将得不到相同的指针 没有它,你可能会得到相同的指针。但是环境的微小变化(可能是你正在使用的库中的补丁)会破坏这一点。所以你将有一个非常不可靠的计划。