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, ...
随机推荐
- 树莓派配置固定IP地址
树莓派配置固定IP地址 1.编辑文件/etc/dhcpcd.confroot@raspberrypi:~# vi /etc/dhcpcd.conf 2.修改以下参数配置,如果没有就在文件底部添加有线配 ...
- UE中返回值为数组的时候,无法传递Reference的问题
我如果要修改一个类或者结构体的成员变量, 那么我需要通过函数返回 也就是说Struct目前不能传递引用,只能传递备份
- Cloudflare教程:如何注册账户、购买域名、开启免费CDN服务?
Cloudflare介绍 什么是Cloudflare Cloudflare是一家总部位于旧金山的美国跨国科技企业,以向客户提供基于反向代理的内容分发网络(CDN)及分布式域名解析服务为主要业务. 目前 ...
- PyCharm配置Miniconda3
打开PyCharm,点击"File"(文件)菜单,选择"Settings"(设置) 选择python interpreter中的配置 选择add 选择Conda ...
- vue pinia sessionstorage 数据存储不上的原因
vue pinia sessionstorage 的坑 默认的配置是开始 localStorage 如果用 sessionstorage 则发现数据存储不上 ,是因为缺少了序列化和反序列化 impor ...
- 4、SpringMVC之获取请求参数
4.1 环境搭建 创建名为spring_mvc_demo2的新module,过程参考3.1节 4.1.1.创建请求控制器 package org.rain.controller; import org ...
- 【Java】匿名表达式 + 构造块
来源自同事的一个代码截图 可以看见最后一行装填HashMap的语法非常的不常见 在我整理思绪之后才明白这语法是使用了 匿名内部类 + 对象构造代码块 一般使用场景是发生在容器对象的创建上,因为有些时候 ...
- 【Vue】Re20 VueX 第一部分(共享数据,Getters)
一.概述 专门为VueJS应用程序开发的状态管理模式 集中式存储管理应用的所有组件的状态,按照相应的规则保证状态以一种可预测的方式发生变化 VueX也集成到了官方调试工具devtools extens ...
- 家务机器人(人形机器人)—— Mobile ALOHA: Your Housekeeping Robot
项目地址: https://mobile-aloha.github.io/ 演示视频地址: https://www.youtube.com/watch?v=HaaZ8ss-HP4 论文地址: http ...
- 【0基础】从零开始电子DIY!
相关: 视频地址: https://www.bilibili.com/video/BV1xv4y137LL/ github地址: https://github.com/zhangwenchao1992 ...