Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Printing the physical address of a C pointer

Tags:

c

memory

I can print the address of a pointer by using the following code

#include<stdio.
int main(){
    int *q =(int*) malloc(4);
    printf("%x\n",q);
}

When i execute the following code a hexadecimal value is printed. Is it the virtual address or the physical address of variable q on heap? If it is virtual how should i print the other?

like image 829
Sanjeev Kumar Avatar asked Sep 20 '25 00:09

Sanjeev Kumar


2 Answers

It's in terms of virtual address space. It's impossible to get a "physical" address in standard C (unless you're on a system which doesn't have virtual memory, of course, in which case it'll always be the physical address) - if it's currently in swap space, for instance, it may not even have one, other than a current location on disk, which wouldn't be very useful to you.

like image 64
Crowman Avatar answered Sep 21 '25 15:09

Crowman


There is no way of the program knowing whether it is a virtual or physical address. The memory is handled by the operating system and MMU which hands out addresses to the program.

like image 30
CmdrDoom Avatar answered Sep 21 '25 14:09

CmdrDoom