函数指针:物理或虚拟地址

maw*_*wia 13 c

当我们得到一个函数的地址或任何对象时,它是该对象的虚拟地址或物理地址?

Uri*_*Uri 13

你是在问一般的指针吗?

在大多数操作系统上,它们是逻辑地址.

操作系统负责通过虚拟内存和分页机制将它们转换为物理地址.这对程序是透明的.这就是误入歧途的程序"触及边界"和GPF的原因.

在一些旧系统(例如DOS)上,它们是物理的,允许你覆盖内存其他部分的内容.


Tyl*_*nry 8

取决于操作系统以及代码运行的级别.

对于现代操作系统上的普通用户登陆程序,您将获得虚拟地址.

  • 你错了.那是一个虚拟地址.没有人说你的main()函数在虚拟地址0加载.实际上,默认情况下ELF二进制文件(在linux中使用)代码段从虚拟地址0x80482c0开始,看起来差不多(有一些隐藏的设置) main()之前的代码.请记住,虚拟地址空间通常是非连续的,虚拟地址仅在您使用时分配.只是因为你的程序加载到0x80482c0并不意味着那里和0x0之间的所有东西都已经被分配了. (4认同)