黑马程序员技术交流社区

标题: 内存地址不是从大到小的分配顺序吗? [打印本页]

作者: .Drenched    时间: 2014-4-27 04:03
标题: 内存地址不是从大到小的分配顺序吗?

为什么day的地址比year大,不应该是先分配大的内存地址给year吗,然后再month,然后再是day???

作者: 夏应斌    时间: 2014-4-27 07:56
全局变量分为显示初始化和未被初始化,已经初始化的是可执行的模块的一部分,而未被初始化的变量,只有当调用的时候才能执行,才能给变量分配内存空间
作者: D调的沉默    时间: 2014-4-28 20:06
哈哈,这个我会,终于让我找到了个问题没怎么有人回答的了。
对于内存地址是从大往小得分配的,但是对于构造体,构造体内部的成员变量是按照定义顺序,从小往大分配的。可以借鉴mj老师说数组的时候内存的地址分配。
譬如
  1. int arry[3] = {12,13,17};
  2.     for (int i=0; i<sizeof(arry)/sizeof(int); i++) {
  3.         
  4.         NSLog(@"arry[%d]=%p",i,&arry[i]);
  5.     }
复制代码

这段代码的执行结果就是2014-04-28 19:53:37.493 property和synthesizes[360:303]
arry[0]=0x7fff5fbff834
arry[1]=0x7fff5fbff838
arry[2]=0x7fff5fbff83c
但是你要是定义两个结构体,他们仍然和变量一样,内存从高地址往低地址分配。如下代码
  1.    
  2.     struct student{
  3.         int month;
  4.         int year;
  5.         int day;
  6.     };
  7.     struct student s1 = {12,15,16};
  8.     struct student s2={13,14,15};
  9.     NSLog(@"s1=%p,s2=%p",&s1,&s2);
复制代码

运行结果如下,s1=0x7fff5fbff838,s2=0x7fff5fbff828
这下该懂了吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2