C语言位域的内存布局
本文将先粗略介绍大小端,和大小端的测试方法,最后介绍位域的内存布局。
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语言位域的内存布局的更多相关文章
- C语言程序的内存布局
		C语言程序的内存布局 一:C语言程序的存储区域 C语言编写的程序经过编绎-链接后,将形成一个统一的文件,它由几个部分组成,在程序运行时又会产生几个其他部分,各个部分代表了不同的存储区域: 1.代码段( ... 
- Linux下C语言程序的内存布局
		在<虚拟地址空间以及编译模式>一节中讲到,虚拟地址空间在32位环境下的大小为 4GB,在64位环境下的大小为 256TB,那么,一个C语言程序的内存在整个地址空间中是如何分布的呢?数据在哪 ... 
- C语言的代码内存布局详解
		一个程序本质上都是由 BSS 段.data段.text段三个组成的.这样的概念在当前的计算机程序设计中是很重要的一个基本概念,而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配, ... 
- C语言的代码内存布局具体解释
		一个程序本质上都是由 BSS 段.data段.text段三个组成的.这种概念在当前的计算机程序设计中是非常重要的一个基本概念,并且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统执行时的内存大小分配, ... 
- C Memory Layout C语言中的内存布局
		在C语言中,内存的主要分为下列几部分: 1. Text/Code Segment 文本/代码区 2. Initialized Data Segments 初始化的数据区 3. Uninitialize ... 
- C语言的代码内存布局
		由以下3个部分组成: 1)BSS 段 BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS ... 
- C语言程序内存布局
		C语言程序内存布局 如有转载,请注明出处:http://blog.csdn.net/embedded_sky/article/details/44457453 作者:super_bert@csdn 一 ... 
- C语言结构体及其内存布局
		code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ... 
- 一起talk C栗子吧(第一百三十一回:C语言实例--C程序内存布局三)
		各位看官们,大家好.上一回中咱们说的是C程序内存布局的样例,这一回咱们继续说该样例.闲话休提,言归正转.让我们一起talk C栗子吧. 看官们,关于C程序内存布局的样例,我们在前面的两个章回都介绍过了 ... 
- C语言位域
		转载自 http://tonybai.com/2013/05/21/talk-about-bitfield-in-c-again/ 再谈C语言位域 五 21 bigwhite技术志 bitfield, ... 
随机推荐
- Geostudio简单实现边坡安全系数的计算
			Geostudio是加拿大团队开发的用于岩土工程稳定性分析的一款工程软件,里面的安全系数的计算基本都是基于极限平衡法原理进行求解的,SLOPE/W模块用于安全系数的求解.SEEP/W模块考虑渗水作用. ... 
- Docker PHP容器安装composer
			1.进入php容器docker exec -it cb6c1fe83bff(php容器ID) bash2.安装composerphp -r "copy('https://install.ph ... 
- Jenkins+docker 部署SpringCloud微服务
			部署需要提前准备的环境:安装好Jenkins.docker.Maven.Jdk1.8.Git 说明:由于本例只说明如何部署,所以有关项目其他服务如nacos.mysql.redis.seata等默认已 ... 
- Windows10 myeclipse 本地部署javaweb项目
			Windows10 myeclipse 本地部署javaweb项目 一,先在网上寻找相关的项目,自己研究学习之后,进行二次开发 原文地址https://www.cnblogs.com/wydyzcnc ... 
- 7、SpringBoot2之整合事务及AOP
			本文在SpringBoot2之整合Mybatis的基础上进行 7.1.整合事务 7.1.1.mapper接口 int deleteEmployeeById(int id); 7.1.2.mapper映 ... 
- 【SQL】 牛客网SQL训练Part3 较难难度
			获取当前薪水第二多的员工的emp_no以及其对应的薪水salary 请你查找薪水排名第二多的员工编号emp_no.薪水salary.last_name以及first_name,不能使用order by ... 
- 【郝斌C ST】02
			自学视频<郝斌C语言自学教程> 10: https://www.bilibili.com/video/BV1os411h77o C语言大纲 - 1.简介 - 2.基本编译知识 - 3.数据 ... 
- 【FastDFS】环境搭建 03  FastDFS & Nginx整合
			FastDFS & Nginx整合: 跟踪器结合Nginx,目的是为了负载均衡和高可用,只有一台Track可以不配置Nginx 安装FastDFS-Nginx-Module到服务器上面: ta ... 
- 【Java】Maven模块化工程SSM整合
			创建数据库一个演示表User CREATE TABLE `user` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(64) DEFAULT NU ... 
- Ubuntu 18.04.4 安装docker18.09 (使用阿里云的源)
			由于AI_Station 是使用容器构建环境的,而且只提供镜像上传下载功能,不为容易提供网络功能,因此需要在平台上把镜像拉取到本地,并安装一些必备软件然后再打包成镜像上传回去,因此需要在本地构建doc ... 
