虚拟地址空间问题记录

虚拟地址空间问题记录

地址空间的高低地址问题

  今天在牛客网学习时看到这样一张图,隐约记得书上讲过OS在低地址区,然后在网上查出了这样一句话

  这句话要怎么理解,为什么OS的位置在物理地址和虚拟地址上是反过来的

堆栈相对位置问题

  我们看到的地址肯定是虚拟地址,根据上图简单测试了一下堆栈的相对位置

源代码

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
    int a=1,b=2,c=3;
    int *p1=(int *)malloc(sizeof(int));
    int *p2=(int *)malloc(sizeof(int));
    free(p1);
    free(p2);
}

调试信息截图

三点疑问

  1. 同样的代码,左边是在Linux下用gcc编译,右边是VS2019,为什么Linux下给出的是48位的地址,Windows下给出的是32位的地址
  2. 局部变量分配在栈中,为什么在Linux gcc编译下a b c三个变量的地址依次是由低到高,而在VS2019下是由高到低
  3. 动态申请的变量在堆中,为什么Linux下堆的地址比栈的地址低,而Windows下堆的地址比栈的地址高

posted on 2021-01-28 22:54  finecs  阅读(53)  评论(0)    收藏  举报

导航