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

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

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
定义结构体指针时,有没有同时分配存储空间啊? 看到结构体的数组定义好以后就直接可以用了。 但是结构体指针在链表中还要malloc()申请空间。 这是为什么啊? 定义结构体指针时并没有分配存储空间,所以要用malloc()申请空间。它都不知道要分配多大空间啊下面仅仅是定义一个类型,不会产生变量,所以不存在分配空间的问题 struct?data { ????int?i; ????int?j; };void?main(void) { ????struct?data?dat1;?//定义一个struct?data类型的变量,和int?i同理。 ????printf(%d\n,?sizeof(struct?data));?//8个字节 ????printf(%d\n,?sizeof(dat1));????????//8个字节 ????struct?data*?pdat1;//定义一个struct?data类型的指针,和int?*pi?同理。 ????printf(%d\n,?sizeof(pdat1));????????//4个字节,就是一个指针的空间,pdat1并没有结构体变量的信息。 ????pdat1?=?(struct?data*)malloc(sizeof(struct?data));?//申请一个空间,把该空间地址给pdat1. ????printf(%d\n,?sizeof(*pdat1));??????//8个字节 ????struct?data?dats1[2];? ????printf(%d\n,?sizeof(dats1));?????//16个字节,两个data变量,不是data指针。 ????dats1[0].i?=?20;??//可以直接使用数组里面的结构体变量 ????dats1[0].j?=?30; ???? ????struct?data*?dats2[2];?//指针数组,包含两个指针,而不是结构体变量 ????printf(%d\n,?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 ?}声明任何对象并定义变量,除了静态成员在一个特别的区,其他的在栈上开辟空间,不用了自动清理,用malloc,?realloc,?calloc,?new?new[]开辟空间是动态分配空间,在堆上进行。值得说明的是,栈空间很小(相对于堆而言),很昂贵,但是通常执行更快。 在Windows下,一个进程的栈在最高端,向下增长,堆在栈下面,向栈的方向增长,下面是数据和代码。Linux下内存布局由开发工具和操作系统合作负责,这四个部分相对位置布局不确定。windows默认栈大小是1M 栈和堆是共享一内存的,可以调节它们的比例。来设置栈和堆的大小。 不过一般情况下,还是用不着的。。int?a1[10]; int*a[10] int?*a2; 很容易知道,a1是包含10个int的数组,大小也就是10*sizeof(int)。我们可以直接使用a1不要在进行什么初始化或者分配空间的游戏,因为数组a1里面本身存放的就是int变量本身了。 然后a2,是一个int*的东西,也就是整型指针,a2不能存放int变量,它只能存放地址,一个int变量的地址。如果要使用a2,必须首先对a2初始化,即将它指向一个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、打开一个终端,su -成root用户; 3、cd soft.version.rpm所在的目录; 4、输入rpm -ivh soft.version.rpm 二、deb包安装方式步骤: 1、找到相应的软件包,比如soft.version.deb,下载到本机某个目录; 2、打开一个终

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档