请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于函数存储方式的疑惑

NDK开发的时候,错误堆栈里面报的都是内存地址,需要通过符号表恢复成函数名称。所以函数加载到内存中之后每次分配的内存地址都是固定的吗?这是编译器定的?如果是的话,多个程序的函数怎么保证使用的内存不冲突?

正在回答 回答被采纳积分+3

1回答

quickzhao 2021-10-07 10:18:41

绝对额地址信息并不稳定,可能随操作系统环境的变化而改变,一般可执行程序的文件加载到内存中的相对位置是稳定的;生成的可执行程序有其固定的格式,在C++程序通过编译生成时确定函数的列表并存入可执行程序,如Windows下的PE文件,在被加载到内存时会根据PE文件的数据区块和RVA(相对虚拟地址)来确定函数等的位置,不会发生冲突。

0 回复 有任何疑惑可以回复我~
  • 提问者 jyau #1
    所以错误堆栈显示的内存地址其实是虚拟地址,这个地址在编译成可执行程序的时候就已经确定了,并且这个虚拟地址是程序独有的,不会跟其他程序共享,也因此不会跟其他程序冲突,可以这么理解吗?
    回复 有任何疑惑可以回复我~ 2021-10-07 12:00:47
  • quickzhao 回复 提问者 jyau #2
    是的,虚拟地址是每个程序独享的。
    回复 有任何疑惑可以回复我~ 2021-10-07 12:33:47
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信