windows和虚拟机ubuntu栈地址扩展的不同

来源:互联网 发布:广告过滤软件 编辑:程序博客网 时间:2024/06/01 03:57
#include <stdio.h>#include <stdlib.h>int main(){    char* p = "abcddddddddddddddddd";                   //p为一个char指针,在stack区,"abc"在常量区,    char* c1 = NULL;                                    //c1在bss    c1 = (char*)malloc(20*sizeof(char));                //给c1分配了20个char大小的空间    strcpy(c1,"hehehe");           //先在常量区分配一个"hehehe",然后拷贝到heap区    char c2[] = "eeeeeeeee11111";                       //c2存放在stacK,因为其由系统分配    /*修改测试:    //c1是自己分配的,在heap区,可以修改    //c2由系统分配,在stack区,可以修改    //p指向的是常量区,不能修改    c2[5] = 'c';        //ok    c1[5] = 'c';        //ok    p[5] = 'c';         //error    */    printf("%X %X %s\n", &p, &("abcddddddddddddddddd"), p);    printf("%X %X %s\n", &c1, c1, c1);    printf("%X %X %s\n", &c2, c2, c2);    printf("%X %X %s\n", &c2[5], c2[5], c2);       /*    p,c1,c2都在stack, "abcddddddddddddddddd"在常量区,c1存放的内容在heap区432CE28 D37888B4 abcddddddddddddddddd432CE30 D5693010 hehehe432CE39 432CE39 eeeeeeeee11111    */    return c1;}


运行结果:

ubuntu:


windows VS:



可以看出,ubuntu下面,栈的扩展方向从低地址到高地址,数组也是。

而window下,栈的扩展方向从高地址到低地址,数组从【0】到【n】是从低地址到高地址。


应该与编译器也有关系,详细的以后再检验吧。

原创粉丝点击