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

标签 c posix

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

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

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

编辑:在我看来,效率并不是这里的唯一目标。封装内存使用是一个更大的目标(快速启 Action 为奶酪)。封装在调试中也非常有帮助。

最佳答案

也许吧。不要依赖它。

正如 Mat 评论的那样,ASLR 随机化了地址。所以当它启用时,你不会得到相同的指针。
没有它,您可能会得到相同的指示。但是环境中的微小变化(可能是您正在使用的库中的补丁)会破坏它。所以你会有一个非常不可靠的程序。

关于c - 静态链接函数在同一台机器上运行时是否具有相同的指针值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18040735/

相关文章:

c - 什么是 C 中的 drand48() 默认种子?

c - 我如何在客户端的 recv() 中引起 ECONNRESET?

c - c中整数除法运算的方向

c - C中的write()函数是阻塞的还是非阻塞的?

linux - 为什么命名信号量可以被任何知道其名称的进程中的线程使用?

c - 编译-std=c90时,如何启用CYGWIN中<time.h>中的clock_gettime()声明?

c - 使用按位运算乘以 3

c - 下一个结构项,不完整类型

c++ - SDL 事件和事件队列

C编程: words from byte array