数据区代码区堆栈区操作系统堆栈.doc

数据区代码区堆栈区操作系统堆栈.doc

ID:50274191

大小:208.51 KB

页数:26页

时间:2020-03-07

数据区代码区堆栈区操作系统堆栈.doc_第1页
数据区代码区堆栈区操作系统堆栈.doc_第2页
数据区代码区堆栈区操作系统堆栈.doc_第3页
数据区代码区堆栈区操作系统堆栈.doc_第4页
数据区代码区堆栈区操作系统堆栈.doc_第5页
资源描述:

《数据区代码区堆栈区操作系统堆栈.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、定义结构体指针时,有没有同时分配存储空间啊?看到结构体的数组定义好以后就直接可以用了。但是结构体指针在链表中还要malloc()申请空间。这是为什么啊?定义结构体指针时并没有分配存储空间,所以要用malloc()申请空间。它都不知道要分配多大空间啊下面仅仅是定义一个类型,不会产生变量,所以不存在分配空间的问题struct data{    int i;    int j;};void main(void){    struct data dat1; //定义一个struct data类型的变量,和int i同理。    printf

2、("%d", sizeof(struct data)); //8个字节    printf("%d", sizeof(dat1));        //8个字节    struct data* pdat1;//定义一个struct data类型的指针,和int *pi 同理。    printf("%d", sizeof(pdat1));        //4个字节,就是一个指针的空间,pdat1并没有结构体变量的信息。    pdat1 = (struct data*)malloc(sizeof(struct data

3、)); //申请一个空间,把该空间地址给pdat1.    printf("%d", sizeof(*pdat1));      //8个字节    struct data dats1[2];     printf("%d", sizeof(dats1));     //16个字节,两个data变量,不是data指针。    dats1[0].i = 20;  //可以直接使用数组里面的结构体变量    dats1[0].j = 30;        struct data* dats2[2]; //指针数组,包含两个指针,

4、而不是结构体变量    printf("%d", sizeof(dats2));  //8个字节,两个指针的大小    dats2[0]->i = 20; //错误!还没有给dats2[0] 指针分配空间    dats2[0]->i = 20; //错误!还没有给dats2[0] 指针分配空间    dats2[0] = (struct data*)malloc(sizeof(struct data)); //分配空间    dats2[0]->i = 20; //ok    dats2[0]->i = 20; //ok }声

5、明任何对象并定义变量,除了静态成员在一个特别的区,其他的在栈上开辟空间,不用了自动清理,用malloc, realloc, calloc, new new[]开辟空间是动态分配空间,在堆上进行。值得说明的是,栈空间很小(相对于堆而言),很"昂贵",但是通常执行更快。在Windows下,一个进程的栈在最高端,向下增长,堆在栈下面,向栈的方向增长,下面是数据和代码。Linux下内存布局由开发工具和操作系统合作负责,这四个部分相对位置布局不确定。windows默认栈大小是1M栈和堆是共享一内存的,可以调节它们的比例。来设置栈和堆的大小。不

6、过一般情况下,还是用不着的。。int a1[10];int*a[10]int *a2;很容易知道,a1是包含10个int的数组,大小也就是10*sizeof(int)。我们可以直接使用a1不要在进行什么初始化或者分配空间的游戏,因为数组a1里面本身存放的就是int变量本身了。int*a[10]是个指针数组,即a是int*类型有10个;即里面存放指向int型的指针。然后a2,是一个int*的东西,也就是整型指针,a2不能存放int变量,这样类型不匹配,它只能存放地址,一个int变量的地址。如果要使用a2,必须首先对a2初始化,即将它指

7、向一个int变量的地址,如:a2 = (int*)malloc(sizeof(int));或者int i = 10;a2 = &i;所以,malloc函数的作用是首先声明一个变量,然后返回该变量的地址。所以:a2 = (int*)malloc(sizeof(int)) 的含义就是把该变量的地址赋值给a2,和a = &i 本质上并没有什么不同,只是一个变量是栈上,一个是堆上,都是一个地址赋值。Linux下软件安装方法总结:一、rpm包安装方式步骤:1、找到相应的软件包,比如soft.version.rpm,下载到本机某个目录;2、打开

8、一个终端,su-成root用户;3、cdsoft.version.rpm所在的目录;4、输入rpm-ivhsoft.version.rpm二、deb包安装方式步骤:1、找到相应的软件包,比如soft.version.deb,下载到本机

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。