博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
不同情况下的高地址与低地址
阅读量:6984 次
发布时间:2019-06-27

本文共 1218 字,大约阅读时间需要 4 分钟。

1. 下面程序输出是多少?

Union U {
  
char
 str[
2
];
  
short
 
int
 num;
};
int
 main() {
  U u;
  u.str[
0
=
 
10
;
  u.str[
1
=
 
1
;
  cout 
<<
 u.num 
<<
 endl;
  system(
"
PAUSE
"
);
  
return
 
0
;
}

     结果为266。对于整数类型,都是低字节存低位,高字节存高位,因此低位是10,高位是1,结果=1*256+10=266。

2. 下面不同变量之间地址大小关系

class
 Test {
public
:
  
int
 m;
  
int
 n;
};
int
 main() {
  
int
 a;
  
char
b;
  
int
 c[
10
];
  Test t;
  cout 
<<
 (size_t)
&
<<
 endl;
  cout 
<<
 (size_t)
&
<<
 endl;
  cout 
<<
 (size_t)
&
<<
 endl;
  cout 
<<
 (size_t)
&
<<
 endl;
  cout 
<<
 (size_t)
&
t.m 
<<
 endl;
  cout 
<<
 (size_t)
&
t.n 
<<
 endl;
  system(
"
PAUSE
"
);
  
return
 
0
;
}

     (size_t)&a > (size_t)&b > (size_t)&c > (size_t)&t.n > (size_t)&t.m = (size_t)t

     2293612   > 2293611  >  2293552  >  2293548     > 2293544      = 2293544
     a、b、c、t都是局部变量,在栈上存储,栈是从高地址到低地址,因此地址逐渐减小。结构体内部,先定义的地址小,后定义的地址大,这与类内的成员,数组总的元素,都是类似的。
     此外,值得注意的是(size_t)&a-(size_t)&b=1,刚好是1个字节,即b的大小。(size_t)&b-(size_t)&c=59,这是因为首先需要字节对齐,补3个字节,从2293611,补到2293608,从2293607到2293552剩下的44个字节是数组占用,注意数组只有10个元素是40个字节,还有4个字节应该是数组名占用的,把数组名看作一个指针?或者是数组名本身包含数组长度的信息,具体情况不是很清楚,不过int a[10]占用的空间是44个字节,而10个int类型的变量占用40个字节。t的字节分配很简单,没有什么了。
    总的来说,具体的地址,需要考虑“栈的高地址到低地址”和“字节对齐”以及“数组”这样的特殊情况等等。

3. 总结

    整数类型内部:低地址存储低位,高地址存储高位。
    局部变量:先定义的高地址,后定义的低地址。
    类,结构体,数组:先定义的低地址,后定义的高地址。
    数组实际占用的空间,要比元素大,感觉上像是给数组名本身一个“指针类型”的空间,即4个字节。

转载地址:http://autpl.baihongyu.com/

你可能感兴趣的文章
当精准广告遇到大数据
查看>>
《机器人自动化:建模、仿真与控制》——2.3 仿真
查看>>
泰一指尚大数据应用成为第一批省级重点企业研究院
查看>>
预测未来 盘点大数据分析领域五大趋势
查看>>
教你编写Node.js中间件,实现服务端缓存
查看>>
又到中元节 应用宝教你如何打败各种鬼
查看>>
资源大集中 浪潮I9000刀片为国家税务总局打造全能型平台
查看>>
PC如何接管手机的双因子身份验证 靠的是英特尔的CPU
查看>>
分析:“AI on Hadoop”有意义吗?
查看>>
起底英特尔大数据
查看>>
《中国人工智能学会通讯》——11.65 双重代价敏感的属性分类模型
查看>>
阿里云人工智能ET夺肺结节诊断世界冠军
查看>>
研究人员发现利用Excel宏可发起跳板攻击
查看>>
绿盟科技发布OpenSSL高危漏洞技术分析与防护方案 G20成员国美国、中国、德国受影响较大...
查看>>
《VMware Virtual SAN权威指南》一2.2.4 容量层设备
查看>>
物联网发展年报显示 2016年智能家居市场快速增长
查看>>
如何在React中做到jQuery-free
查看>>
4G+宽带高歌猛进:移动双线虐杀联通
查看>>
带你了解超大规模数据中心究竟有何不同?
查看>>
用Python实现每秒处理120万次HTTP请求
查看>>