读书人

: 关于C的指针有关问题

发布时间: 2012-02-26 20:19:44 作者: rapoo

求助: 关于C的指针问题
现在我们编的程序都是在保护模式下的程序,面对的程序空间是虚地址空间,虚地址空间可以比内存大,也就是说我们编的程序可以比内存大很多,那么在没有编译程序之前,C语言的指针到底指向的是内存地址还是虚地址呢?
比如:
int main()
{
int *p;
p=2000;
printf( "%d\n ",*p);
}

这个程序能运行吗?(我在Linux下试了不能运行,没在windows下试)我把p赋予2000的地址,是代表虚地址的2000,还是内存地址的2000呢?如果程序不能运行,那是为什么不能运行呢?求解答,谢谢各位了!

[解决办法]
所有的你用户程序的地址都是虚拟地址
最后需要通过mmu进行转化成物理地址访问

p=2000; 当然是虚拟地址
[解决办法]
现在我们编的程序都是在保护模式下的程序,面对的程序空间是虚地址空间,虚地址空间可以比内存大,也就是说我们编的程序可以比内存大很多,那么在没有编译程序之前,C语言的指针到底指向的是内存地址还是虚地址呢?
比如:
int main()
{
int *p;
p=2000;
printf( "%d\n ",*p);
}

这个程序能运行吗?(我在Linux下试了不能运行,没在windows下试)我把p赋予2000的地址,是代表虚地址的2000,还是内存地址的2000呢?如果程序不能运行,那是为什么不能运行呢?求解答,谢谢各位了!


指针虽然灵活,但也不能这样随便方位任何地址,在linux中,每个进程有4G大小的进程地址空间,低地址空间内的
1G为系统空间,其余的3G为用户空间.用户空间内的指针是不能直接访问系统内的地址的.
你使用是不用管这4G的空间如何和你512m的内存如何对应,这属于mmc的工作,它会为你做好这一且的.

读书人网 >C语言

热点推荐