逻辑地址混乱

时间:2009-12-08 09:56:18

标签: 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;
}

当我在我的32位系统中运行该程序时,显示

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

我希望将逻辑地址与页面大小相关联。 我的意思是说这个逻辑地址是如何创建的(就偏移量,页面,数据而言)

对于这个程序大小是1257字节,但我认为整个页面将被加载(纠正我,如果我错了)是否有任何方式,我可以确定整个页面加载或只有1257字节 加载。

我希望我的问题很明确,如果有任何不符,请告诉我。感谢

2 个答案:

答案 0 :(得分:0)

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

尝试阅读文件/ proc / [proc-id] / maps,您将获得有关此类问题的更多想法。

同时学习ELF格式也有帮助。

答案 1 :(得分:0)

您需要牢记两件事。一个是你将拥有构成主要和第二个的指令的地址,你将拥有正在运行的程序所需的堆栈空间。 main的地址将在指令空间中,x的地址实际上在堆栈中。