C语言的内存地址是按什么顺序排列的:比如是按从大到小还是内存自动分配的,请举例
5个回答
展开全部
您问的具体是什么?
(1)是地址编号和集成电路里面(用显微镜看)各个单元的位置次序之间的关系?
(2)还是问程序中各个指令代码执行的次序和地址编号之间的关系?
(3)还是问程序中各个变量的次序和地址编号之间的关系?
如果是(1),那么
集成电路里面各个单元的位置次序,一般是不公开的。所以人们不知道它的次序是从左到右还是从右到左还是别的方式。据说,现在的布局大多是交叉分散排列的,因为程序中经常出现连续访问连续地址的操作,如此分散排列,可以使功耗分散,减小局部温升,延长器件寿命。
如果是(2),那么
一般的指令,除了跳转指令和调用、返回指令以外,普通指令都是按照地址连续增加的次序,连续排列的。而且,汇编语言中书写程序清单的次序,除了使用特殊伪指令规定地址(如ORG指令)处以外,都是按照地址编号连续增加的次序书写的。如此,除跳转、调用、返回指令外,书写的次序就是执行的次序。
如果是(3),那么
用汇编语言设计程序时,你可以随自己习惯,觉得怎么安排方便,就怎么安排。
如果是高级语言,那么,不同的编译程序,可以有所不同。
不过,如果是C语言,那么数组内部各个下标变量的地址,必须是按照下标由小到大地址也由小到大的次序连续安排。这是因为,C语言中,对指针的运算有严格规定。
例如p是指向整数的指针,则p+2就应该等于指向p所指的整数变量后面第二个整数变量的指针。于是(p+2)相应的物理地址,就应该等于p相应的物理地址加上2倍int变量的长度。 而对于数组,又是按照指针的概念来规定的。例如:a[2]就和*(a+2)完全等效。
(1)是地址编号和集成电路里面(用显微镜看)各个单元的位置次序之间的关系?
(2)还是问程序中各个指令代码执行的次序和地址编号之间的关系?
(3)还是问程序中各个变量的次序和地址编号之间的关系?
如果是(1),那么
集成电路里面各个单元的位置次序,一般是不公开的。所以人们不知道它的次序是从左到右还是从右到左还是别的方式。据说,现在的布局大多是交叉分散排列的,因为程序中经常出现连续访问连续地址的操作,如此分散排列,可以使功耗分散,减小局部温升,延长器件寿命。
如果是(2),那么
一般的指令,除了跳转指令和调用、返回指令以外,普通指令都是按照地址连续增加的次序,连续排列的。而且,汇编语言中书写程序清单的次序,除了使用特殊伪指令规定地址(如ORG指令)处以外,都是按照地址编号连续增加的次序书写的。如此,除跳转、调用、返回指令外,书写的次序就是执行的次序。
如果是(3),那么
用汇编语言设计程序时,你可以随自己习惯,觉得怎么安排方便,就怎么安排。
如果是高级语言,那么,不同的编译程序,可以有所不同。
不过,如果是C语言,那么数组内部各个下标变量的地址,必须是按照下标由小到大地址也由小到大的次序连续安排。这是因为,C语言中,对指针的运算有严格规定。
例如p是指向整数的指针,则p+2就应该等于指向p所指的整数变量后面第二个整数变量的指针。于是(p+2)相应的物理地址,就应该等于p相应的物理地址加上2倍int变量的长度。 而对于数组,又是按照指针的概念来规定的。例如:a[2]就和*(a+2)完全等效。
展开全部
默认是从小到大的,如果是用数组的话
链表等则不一定,因为他的地址是不连续的!
链表等则不一定,因为他的地址是不连续的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
内存是连续分布的,地址也是连续排列的
如:
int a[4]
有4个整形,a[1]的位置在a[0]的位置的后4个字节(假设int占用4个字节)
内存的分配又是另一个话题了
如:
int a[4]
有4个整形,a[1]的位置在a[0]的位置的后4个字节(假设int占用4个字节)
内存的分配又是另一个话题了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
连续分配的内存空间是小到大的。。
如果是随机分配的内存,每次分配的首地址是随机的,所以不嫩比。
但是一次分配的内存空间,内部同样是小到大。
如果是随机分配的内存,每次分配的首地址是随机的,所以不嫩比。
但是一次分配的内存空间,内部同样是小到大。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
计算机里面存数据有两种方式
在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节
大端则正好相反
存储方式主要与计算机的CPU有关
在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节
大端则正好相反
存储方式主要与计算机的CPU有关
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询