Memory 逻辑地址混淆

Memory 逻辑地址混淆,memory,gcc,fragmentation,Memory,Gcc,Fragmentation,我试图用逻辑地址做一些分析。下面的程序解释 我的动机 #include<stdio.h> int main() { int x=10; printf("The address of main is %p\n",&main); printf("The address of x is %p\n",&x); return 0; } 我想把逻辑地址与页面大小联系起来。。 我的意思是说这个逻辑地址是如何创建的(在偏移量、页面、数据方面) 对于这个程序,大小是1257字节,

我试图用逻辑地址做一些分析。下面的程序解释 我的动机

#include<stdio.h>

int main()
{
int x=10;
printf("The address of main is %p\n",&main);
printf("The address of x is %p\n",&x);

return 0;
}
我想把逻辑地址与页面大小联系起来。。 我的意思是说这个逻辑地址是如何创建的(在偏移量、页面、数据方面)

对于这个程序,大小是1257字节,但我认为整个页面将被加载(如果我错了,请纠正我),有没有任何方法可以确保整个页面被加载,或者只有1257字节 上膛


我希望我的问题是明确的,如果有任何差异,请让我知道。谢谢

您最好进一步了解如何将二进制程序加载到操作系统中。二进制文件中的不同部分将加载到不同的页面中

尝试读取文件/proc/[proc id]/maps,您将对此类问题有更多的了解


学习ELF格式也有帮助。

有两件事需要记住。一个是您将拥有组成主指令的指令地址,另一个是您将拥有运行程序所需的堆栈空间。main的地址将在指令空间中,x的地址实际上在堆栈上

The address of main is 0x80483b4
The address of x is 0xbfe3b1e0

size page_size
text    data     bss     dec     hex filename
 993     260       4    1257     4e9 page_size

getconf PAGESIZE
4096