CPP--借助神器VS理解内存存储(含大小端对齐)
2018-06-17 22:45:13来源:未知 阅读 ()
单位,补码之类的可以看这个:http://www.cnblogs.com/dotnetcrazy/p/8178175.html
先说说大小端对齐的事情,然后再看:
内存最小单位==》Byte,int 占 4Byte
重点来了,大于Byte的数据类型在内存中存放需要有先后顺序(一个里面放不下,那么在内存中就要有先后顺序了)
小端对齐:高内存地址放整数高位,低内存地址放整数低位(高高低低)简称:倒着放(代表:X86,ARM)
大端对齐:高内存地址放整数低位,低内存地址放整数高位(高低低高)简称:正着放(很多unix服务器都这样)
举个栗子:int i=0x12345678;
之前也有想了解这些,第一个不是学底层的不知道从何理解,第二个上网搜概念,大牛们三言两语就结束了,举得例子也比较复杂,对于非C方向的可能有点吃力,所以一直没理解。还有些网上的根本是胡说,妄以揣测,不能据理力争
今天偶然发现原来还要内存窗口之说,就慢慢的打开了思路,形成了自己的理解,有不当之处欢迎指出,小子感激不尽
进入正文:
调试的时候先打开内存窗口:
监视一下i的地址,在内存窗口里面找到这个值,发现里面有个32(50转换成16进制就是32)
验证一下下面的确是16进制
我的理解是:
这次把int改成16进制再看看调试结果:CPU是x86、ARM架构基本上都遵循 小端对齐(高地址放高位,低地址放低位)
图中很明显,内存地址越下面的越大(0x0018FBF4 > 0x0018FBB8),我们监控的地址明显是低地址
0x12345678,高位是1,低位是8。我画张转换图
然后解释下,为什么占了4个
int,占4个字节(byte),而1byte=8个bit
所以看图:
再根据低低高高的原则,就是这样放了
验证一下我的想法:(1不够了,所以用0补)
内存中存的是2进制的数,现在我们进行逆推,自然就有了这幅图:(内存最小单位byte)
吐槽一下,尼玛,上学一直不太明了的东西,在VS这个神器下竟然解决了!!
扩展:(X86,ARM一般都是小端对齐,很多Unix服务器用大端对齐)
内存地址位数其实也有讲究,把VS切换到X64下,发现内存地址也长了许多
X86的是8位,也就是1byte,同理可推X64的是2byte(各个环境不同这个值可能不太一样)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:1004 四子连棋 未完成
- 不借助多余参数也可交换两个参数(c++,swap函数) 2020-04-24
- C++借助curses库实现俄罗斯方块 2018-11-12
- 小代码编写神器:LINQPad 使用入门 2018-06-18
- Visual Basic 2012 借助DataGridView控件将Excel 2010数据导 2018-06-18
- Visual Basic 2012 借助DataGridView控件将SQL server2012 2018-06-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash