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, ...
随机推荐
- 关于failed to load resource 问题的处理
问题: c++做插件,写了一个native class,继承于ue的类ActorComponent,而蓝图里也继承了这个c++ class,都在插件里,每次打开的时候就有这个错误: 之前的解决办法,复 ...
- 安卓网络通信之 HttpURLConnection 文件上传
文件上传分为二步,第一步选择文件 代码思路是: chooseFile()方法用于创建一个Intent对象,并设置Intent的Action为ACTION_GET_CONTENT,这表示获取内容,即选 ...
- (2024最新)有效解决OpenAI Chatgpt Plus升级报错【您的银行卡被拒绝了/your card has been declined」,不用再问怎么办?
在OpenAI升级ChatGPT plus时我们可能会遇到升级报错[您的银行卡被拒绝了/your card has been declined」,有些人看到这个可能就会不知所措 注意,这个问题目前依旧 ...
- k8s 环境搭建(2)
安装docker组件 配置本地源或者自带的网络源2选1 1.切换镜像源 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce ...
- 【JavaScript】JQuery-Ztree 演示demo
使用CDN引用JQuery和ZTree的资源 demo页的代码: <!DOCTYPE html> <html lang="en"> <head> ...
- 【Kafka】01 基于Docker环境的单例Kafka搭建
安装参考: https://www.cnblogs.com/vipsoft/p/13233045.html 环境安装需要 Zookeeper + Kafka 要学习Kafka还需要繁琐的安装配置,所以 ...
- 网友开放的开源项目:网页版的A*算法可视化演示程序
相关项目: https://xueqiaoxu.me/#projects 项目介绍: A JavaScript path-finding library for grid based games. I ...
- nvidia官方AI框架软件的命令行操作接口 —— NVIDIA GPU Cloud (NGC) CLI
NVIDIA GPU Cloud (NGC) CLI 安装介绍地址: https://org.ngc.nvidia.com/setup/installers/cli 安装好后需要输入自己的NVIDIA ...
- python多进程multiprocessing模块的变量传递问题:父进程中的numpy.array对象隐式序列化到子进程后的inplace操作的问题
参考: https://docs.python.org/zh-cn/3/library/multiprocessing.html cloudpickle -- Python分布式序列化的专用模块 ...
- csv或excel文件通过plsql导入到oracle数据库中
1.背景 实际开发中经常遇到将数据直接导入到数据库中,操作如下 2.操作 第一步: 第二步:选择要导入的csv文件 第三步:选择数据库表字段与csv的列对应,然后点击导入,完成 完美!