采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
NDK开发的时候,错误堆栈里面报的都是内存地址,需要通过符号表恢复成函数名称。所以函数加载到内存中之后每次分配的内存地址都是固定的吗?这是编译器定的?如果是的话,多个程序的函数怎么保证使用的内存不冲突?
绝对额地址信息并不稳定,可能随操作系统环境的变化而改变,一般可执行程序的文件加载到内存中的相对位置是稳定的;生成的可执行程序有其固定的格式,在C++程序通过编译生成时确定函数的列表并存入可执行程序,如Windows下的PE文件,在被加载到内存时会根据PE文件的数据区块和RVA(相对虚拟地址)来确定函数等的位置,不会发生冲突。
所以错误堆栈显示的内存地址其实是虚拟地址,这个地址在编译成可执行程序的时候就已经确定了,并且这个虚拟地址是程序独有的,不会跟其他程序共享,也因此不会跟其他程序冲突,可以这么理解吗?
是的,虚拟地址是每个程序独享的。
登录后可查看更多问答,登录/注册
一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维
1.2k 12
1.3k 10
1.2k 9
997 9