本文将先粗略介绍大小端,和大小端的测试方法,最后介绍位域的内存布局。

1. 大小端

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。

小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。

2. 大小端测试代码

#include <stdio.h>

unsigned char find_cpu_endian(void)
{
int x=1;
unsigned char cpu_endian = 0; if(*(char*)&x==1)
cpu_endian=1; //小端模式
else
cpu_endian=2; //大端模式 return cpu_endian;
} int main(){ printf("%d \n", find_cpu_endian()); return 0;
}

3. 探究位域的内存布局

先科普下共用体,这个在平常编码用的也不多。

上实验代码,我们通过实验代码来理解位域的内存布局。

union{
struct {
char i:1;
char j:2;
char m:3;
}s; char ch;
}r; int main(int argc, char argv[])
{
r.s.i = 1;
r.s.j = 2;
r.s.m = 3; printf(" DEC:r.ch = %d , HEX:r.ch = 0x%x \n", r.ch, r.ch); printf("sizeof(r) = %ld \n", sizeof(r)); return 0;
}

3.1在PC ubuntu 小端模式 的环境上,运行:

root@lmw-virtual-machine:/home/lmw/桌面/C_Text# ./ab
DEC:r.ch = 29 , HEX:r.ch = 0x1d
sizeof(r) = 1
root@lmw-virtual-machine:/home/lmw/桌面/C_Text#

根据打印的0x1d,算出二进制是 00011101 。我们画出内存布局:

3.2在大端模式 的环境上,运行:

  不好意思,手边一块linux板子和一块单片机板子都是小端的, 没法做实验了。

小结:

  我们常说的大小端,是以字节为最小单位进行划分的,组织各个字节在内存上的布局。
  但是经过实测发现,

       对于位域,属于一个字节内的各个域的内存布局,也会受大端、小端不同平台的影响。
  小端模式下,遵循低地址存储低bit的原则。

.

C语言位域的内存布局的更多相关文章

  1. C语言程序的内存布局

    C语言程序的内存布局 一:C语言程序的存储区域 C语言编写的程序经过编绎-链接后,将形成一个统一的文件,它由几个部分组成,在程序运行时又会产生几个其他部分,各个部分代表了不同的存储区域: 1.代码段( ...

  2. Linux下C语言程序的内存布局

    在<虚拟地址空间以及编译模式>一节中讲到,虚拟地址空间在32位环境下的大小为 4GB,在64位环境下的大小为 256TB,那么,一个C语言程序的内存在整个地址空间中是如何分布的呢?数据在哪 ...

  3. C语言的代码内存布局详解

    一个程序本质上都是由 BSS 段.data段.text段三个组成的.这样的概念在当前的计算机程序设计中是很重要的一个基本概念,而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配, ...

  4. C语言的代码内存布局具体解释

    一个程序本质上都是由 BSS 段.data段.text段三个组成的.这种概念在当前的计算机程序设计中是非常重要的一个基本概念,并且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统执行时的内存大小分配, ...

  5. C Memory Layout C语言中的内存布局

    在C语言中,内存的主要分为下列几部分: 1. Text/Code Segment 文本/代码区 2. Initialized Data Segments 初始化的数据区 3. Uninitialize ...

  6. C语言的代码内存布局

    由以下3个部分组成: 1)BSS 段 BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS ...

  7. C语言程序内存布局

    C语言程序内存布局 如有转载,请注明出处:http://blog.csdn.net/embedded_sky/article/details/44457453 作者:super_bert@csdn 一 ...

  8. C语言结构体及其内存布局

    code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...

  9. 一起talk C栗子吧(第一百三十一回:C语言实例--C程序内存布局三)

    各位看官们,大家好.上一回中咱们说的是C程序内存布局的样例,这一回咱们继续说该样例.闲话休提,言归正转.让我们一起talk C栗子吧. 看官们,关于C程序内存布局的样例,我们在前面的两个章回都介绍过了 ...

  10. C语言位域

    转载自 http://tonybai.com/2013/05/21/talk-about-bitfield-in-c-again/ 再谈C语言位域 五 21 bigwhite技术志 bitfield, ...

随机推荐

  1. Python爬虫Post请求返回值为-1000

    今天写了一个简单的爬虫程序,为了爬取kfc官网的餐厅数据,代码如下 # ajax的post请求--肯德基官网 def create_request(page): url='http://www.kfc ...

  2. C#:只支持GET和POST方法的浏览器,如何发送PUT/DELETE请求?RESTful WebAPI如何响应?

    理想的RESTful WebAPI采用面向资源的架构,并使用请求的HTTP方法表示针对目标资源的操作类型.但是理想和现实是有距离的,虽然HTTP协议提供了一系列原生的HTTP方法,但是在具体的网络环境 ...

  3. Python 按比例获取样本数据或执行任务

    按比例获取样本数据或执行任务 By:授客 QQ:1033553122 开发环境 win 10 python 3.6.5 需求 已知每种分类的样本占比数,及样本总数,需要按比例获取这些分类的样本.比如, ...

  4. Rust 中 *、&、mut、&mut、ref、ref mut 的用法和区别

    Rust 中 *.&.mut.&mut.ref.ref mut 的用法和区别 在 Rust 中,*.ref.mut.& 和 ref mut 是用于处理引用.解引用和可变性的关键 ...

  5. scratch少儿编程卡通三国背景72张全套素材包【免费下载】

    scratch卡通三国题材背景图片,共72张,让你轻松打造scratch三国世界! 免费下载地址:https://www.xiaohujing.com.cn 这套背景图片以卡通风格呈现,色彩鲜艳.造型 ...

  6. RHCA rh442 007 hugetlbfs strace命令追踪 脏页设置 内存分配

    内存管理 虚拟内存 --- 物理内存 应用程序申请虚拟内存 --- RAM + SWAP (真正主板上的设备) 他们之间有一张映射表 page table 页表 PTE: 页表条目 虚拟内存和物理内存 ...

  7. UDP协议测试

    UDP协议测试 我们一般想到测试连通性时第一考虑到的就是使用ping命令. 但是我们知道ping命令使用的是icmp协议,属于tcp/ip协议中的一个子协议,所以我们可以用ping或tcping命令来 ...

  8. P1973 [NOI2011] NOI 嘉年华

    思路: 先将时间进行离散化,设总时间为 \(cnt\),然后考虑求出 \(W(l,r)\),即在时间段 \([l,r]\) 内的所有节目,可以 \(n^2\) 前缀和,也可以 \(n^3\) 暴力. ...

  9. 【Java】Applet开发

    一.Applet开发环境准备 IDEA在2018版本默认提供了Applet启动配置 创建一个Applet应用配置: 在IDEA2019版本之后,这个应用配置选项被移除了,改为Java Applet S ...

  10. jmeter 使用非 GUI 模式运行测试脚本

    使用非 GUI 模式运行测试脚本时可以使用的一些命令:-h 帮助 -> 打印出有用的信息并退出-n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter-t 测试文件 -> ...