单位,补码之类的可以看这个: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(各个环境不同这个值可能不太一样)

CPP--借助神器VS理解内存存储(含大小端对齐)的更多相关文章

  1. CPP--借助神器VS理解内存存储

    之前也有想了解这些,第一个不是学底层的不知道从何理解,第二个上网搜概念,大牛们三言两语就结束了,举得例子也比较复杂,对于非C方向的可能有点吃力,所以一直没理解. 今天偶然发现原来还要内存窗口之说,就慢 ...

  2. C语言内存:大端小端及判别方式

    大端和小端是指数据在内存中的存储模式,它由 CPU 决定:1) 大端模式(Big-endian)是指将数据的低位(比如 1234 中的 34 就是低位)放在内存的高地址上,而数据的高位(比如 1234 ...

  3. memcached全面剖析–2. 理解memcached的内存存储

    Slab Allocation机制:整理内存以便重复使用 最近的memcached默认情况下采用了名为Slab Allocator的机制分配.管理内存. 在该机制出现以前,内存的分配是通过对所有记录简 ...

  4. memcached全面剖析--2.理解memcached的内存存储

    下面是<memcached全面剖析>的第二部分. 发表日:2008/7/9 作者:前坂徹(Toru Maesaka) 原文链接:http://gihyo.jp/dev/feature/01 ...

  5. C/C++内存存储

    #include <stdio.h> #include "string.h" #include "malloc.h" void Swap(int a ...

  6. C/C++内存存储问题

    #include <stdio.h> #include "string.h" #include "malloc.h" void Swap(int a ...

  7. 理解Javascript_01_理解内存分配

    理解Javascript_01_理解内存分配 转载自:http://www.cnblogs.com/fool/archive/2010/10/07/1845226.html   在正式开始之前,我想先 ...

  8. spark 源码分析之十六 -- Spark内存存储剖析

    上篇spark 源码分析之十五 -- Spark内存管理剖析 讲解了Spark的内存管理机制,主要是MemoryManager的内容.跟Spark的内存管理机制最密切相关的就是内存存储,本篇文章主要介 ...

  9. [转帖]JVM—深入理解内存模型与垃圾收集机制

    JVM—深入理解内存模型与垃圾收集机制 https://juejin.im/post/5d68dc9ee51d4561ad6548f7 前言 Java是一种跨平台的语言,当初其设计初衷也是为了解决各个 ...

随机推荐

  1. 小白必须懂的MongoDB的十大总结

    小白必须懂的MongoDB的总结 一.MongoDB的认识 1.什么是MongoDB? MongoDB 是一个介于关系数据库和非关系数据库之间的开源产品,是最接近于关系型数据库的 NoSQL 数据库. ...

  2. CentOS 6.7下 Samba服务器的搭建与配置(share共享模式)

    https://www.linuxidc.com/Linux/2016-12/138220.htm

  3. Scrum Meeting 8

                第八次会议 No_00:工作情况 No_01:任务说明 待完成 已完成 No_10:燃尽图 No_11:照片记录 待更新 No_100:代码/文档签入记录 No_101:出席表 ...

  4. Linux课题实践四——ELF文件格式分析

    2.4   ELF文件格式分析 20135318 刘浩晨 ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文件用于存储Linux程序.ELF文件(目 ...

  5. sring引入mybatis

    1.首先框架结构是这样的(jar包还是要导的) 2.web.xml和springMVC-servlet.xml未作任何新的配置,这里简单贴一下代码: <?xml version="1. ...

  6. Doors Breaking and Repairing CodeForces - 1102C (思维)

    You are policeman and you are playing a game with Slavik. The game is turn-based and each turn consi ...

  7. SQL Server 递归查询上级或下级组织数据(上下级数据通用查询语法)

    查询上级组织数据: WITH OCTE AS ( AS LVL FROM IOV_Users U LEFT JOIN IOV_Organization O ON U.OrgId=O.ID UNION ...

  8. PAT 1047 编程团体赛

    https://pintia.cn/problem-sets/994805260223102976/problems/994805277163896832 编程团体赛的规则为:每个参赛队由若干队员组成 ...

  9. 【转】Linux tail 命令详解

    Linux tail 命令详解 http://www.2cto.com/os/201111/110143.html

  10. Android控件第6类——杂项控件

    1.Toast Toast用于显示提示信息. Toast不会获得焦点,没法关闭,过段时间会自动消失. 使用方法:Toast.makeText获得Toast,并设置相关属性.调用Toast对象的show ...