LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 950|回复: 6

进程segment地址高低问题

[复制链接]
发表于 2008-10-24 09:10:52 | 显示全部楼层 |阅读模式
有一点一直不明白,为什么我输出的进程的各个段的一些变量的地址的长度不同呢。
比如变量a在stack segment,它的地址一般很长0x7fffc0aaadbc,
而同一个进程的text segment地址却是0x4005e8

不知道看什么书能找到答案。找了一些虚拟内存映射的文章,可是都说的是理论,很含糊。
希望有人给我解释一下,谢谢!
发表于 2008-10-24 13:20:22 | 显示全部楼层
這跟进程沒關係,stack 是由上至下的,所以在 64 位元下便有一個大於 2^32 的地址
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-24 14:38:53 | 显示全部楼层
Post by khc;1898591
這跟进程沒關係,stack 是由上至下的,所以在 64 位元下便有一個大於 2^32 的地址

在64位系统中,为什么栈指针的长度比代码段指针的长度长呢?我的是amd64
回复 支持 反对

使用道具 举报

发表于 2008-10-24 17:03:31 | 显示全部楼层
每个进程都有自己的虚拟地址,从0x00000000 00000000 到 0x00007fff ffffff,代码段从0x400000开始,堆栈从0x80000000000往下增长。
回复 支持 反对

使用道具 举报

发表于 2008-10-24 17:05:33 | 显示全部楼层
试试下面代码
#include <stdio.h>
int main( int argc, char *argv[] )
{
    int a, b;
    printf( "argv: %X, main: %X.\n", &a, main );
}
回复 支持 反对

使用道具 举报

发表于 2008-10-24 23:19:19 | 显示全部楼层
并不是栈的地址长,只是代码段没有用到64位
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-27 11:59:38 | 显示全部楼层
感谢zhangxudong和 hanchao3c
我现在已经明白了差不多了。是%p格式不会将前面的0000显示出来。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表