关于函数存储方式的疑惑

来源:6-3 一般指针,数组指针和指针数组

jyau

2021-10-06

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

写回答

1回答

quickzhao

2021-10-07

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

0
2
quickzhao
回复
jyau
是的,虚拟地址是每个程序独享的。
2021-10-07
共2条回复

重学C++ ,重构你的C++知识体系

一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维

3884 学习 · 1103 问题

查看课程