zoukankan      html  css  js  c++  java
  • 内存的大小端模式

    因为不明白为什么图像的数据会以BGR而不是RGB的方式存放到内存中,扯出了以前在计算机组成原理中学习过的内存大小端模式。记录下来,方便以后再复习。

     

    在计算机系统中,内存的管理以字节为单位,1 byte=8 bit,一个字节的内容在内存中的存放顺序是固定的。

    在C语言中,很多类型大小超过了1byte,例如int通常是4byte,多个字节的数据在内存中可以用两种方式对齐来排放,这两种方式就是大端模式和小端模式。

    如:0x12345678 

    其中0x12是高位的数据,0x78是低位数据。

    在内存中,可以按照地址的大小分为低地址和高地址

                    内存地址           大端模式             小端模式

    低地址   |0x00440000|   0x12      0x78

          |0x00440001|   0x34      0x56

          |0x00440002|   0x56      0x34

    高地址   |0x00440003|   0x78      0x12

    1.小端模式(Little-Endian)就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。(x86采用小端模式  )
    2.大端模式(Big-Endian)  就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。(在内存和字符串的排列一致,在内存中排列符合我们的习惯)

    各自的优点就是对方的缺点:

    小端模式:强制转换数据不需要调整字节内容;

    大端模式:符号位的判定固定为第一个字节,容易判断正负。

     用一段C++确定是大端还是小端:

    int a=0x1234;
    	char b=*(char *)&a;
    	if(b==0x12)
    		std::cout<<"big-endian"<<std::endl;
    	else
    		std::cout<<"little-endian"<<std::endl;
    

      

    参考博文:http://blog.csdn.net/ce123_zhouwei/article/details/6971544

    ————————————————————————————————————————————

    在Visual studio中,可以参看内存值:

    注意,下图的测试是在intel 的x86架构下,内存以小端分布。

     

    但请注意,小端分布是有单位的,这里设置了以4字节为单位。整个内存的分布看起来就像是大端模式一样。

    将查看内存值的单位调整,如下图:

     

     

     

    ——————————————————————————————————————————————————————————————————————————————————

    看到这里,相信各位看官已经明白了什么是内存的小端和大端分布了。

  • 相关阅读:
    《Head First》 MVC运用的设计模式
    unity工具 Animator的使用
    服务器搭建 如果搭建KBE开源服务器
    unity 实战图片挖洞Mask(转载)
    unity博客 推荐(不断补充)
    unity实战 UGUI英雄联盟英雄头顶分段式血条
    unity组成 ToLua
    unity实战 UGUI Text 间距和ContentSizeFitter组件的适配
    unity工具 推荐(不断补充)
    各种单例模式的对比分析
  • 原文地址:https://www.cnblogs.com/wangpei0522/p/3750390.html
Copyright © 2011-2022 走看看