博客
关于我
C语言中判断大小端的方法
阅读量:586 次
发布时间:2019-03-11

本文共 998 字,大约阅读时间需要 3 分钟。

存储器模式(SMALL LARGE COMPACT)

C语言中判断大小端的方法

在使用C语言编写程序时,了解系统的存储器模式至关重要。大端模式和小端模式是两种常见的内存存储方式。大端模式表示数据的低位保存在内存的高地址中,而高位保存在低地址中;而小端模式则相反。这一区别的根源在于计算机系统中以字节为单位的内存地址划分。每个地址单元对应一个字节。在C语言中,不仅有8位的char类型,还有16位的short类型、32位的long类型(取决于编译器)。对于宽度超过8位的处理器(如16位或32位的),内存存储方式的选择就显得尤为重要。

举例来说,一个16位的short类型变量x,以内存地址0x0010存储,值为0x1122,其中0x11是高字节,0x22是低字节。在大端模式下,0x11保存在低地址0x0010,0x22保存在高地址0x0011。而在小端模式下,存储情况刚好相反,这可能导致后续数据访问的效率差异。

简单测试代码:

short int x;char x0, x1;x = 0x1122;x0 = ((char*)&x)[0];  // 低地址单元x1 = ((char*)&x)[1];  // 高地址单元

如果x0的值是0x11,则编译器处于大端模式;如果x0是0x22,则表示小端模式。

C51存储器模式

C51编译器提供了三种不同的存储器模式:SMALL、LARGE和COMPACT。这些模式主要决定了变量存储的位置,以及堆栈和函数参数的分配方式。

一般来说,SMALL模式是首选,仅在内存需求严重时才考虑其他模式。尽量使用SMALL模式编译,数据段存储所有内部变量和全局变量,默认参数传递都在数据段中进行。如果需要较大的函数栈,编译器会在内存RAM中分配空间。SMALL模式的优势在于具有较低的内存使用量,感兴趣的读者可以继续高度优化代码。

对于256字节或更少的外部RAM,压缩模式是一个不错的选择。此时,除非有特殊说明,否则变量将分配在PDATA段,参数传递仍在内存RAM中进行。PDATA段的数据可以通过R0和R1进行间接寻址,而使用DPTR需要更慢。与大模式相比,数据访问速度更快,因此需要科学的存储方案。

选择哪种模式需要根据项目需求决定。如果系统所需内存量低于RAM半量,优先选择SMALL模式。

KEIL-C51作为一款功能强大的编译器,以内存使用优化著称。

转载地址:http://turvz.baihongyu.com/

你可能感兴趣的文章
OpenCV与AI深度学习 | 使用YOLO11实现区域内目标跟踪
查看>>
OpenCV与AI深度学习 | 使用YOLOv8做目标检测、实例分割和图像分类(包含实例操作代码)
查看>>
OpenCV与AI深度学习 | 基于GAN的零缺陷样本产品表面缺陷检测
查看>>
OpenCV与AI深度学习 | 基于OpenCV和深度学习预测年龄和性别
查看>>
OpenCV与AI深度学习 | 基于Python和OpenCV将图像转为ASCII艺术效果
查看>>
OpenCV与AI深度学习 | 基于PyTorch实现Faster RCNN目标检测
查看>>
OpenCV与AI深度学习 | 基于PyTorch语义分割实现洪水识别(数据集 + 源码)
查看>>
OpenCV与AI深度学习 | 基于YOLOv8的停车对齐检测
查看>>
OpenCV与AI深度学习 | 基于机器视觉的磁瓦表面缺陷检测方案
查看>>
Opencv中KNN背景分割器
查看>>
OpenCV中基于已知相机方向的透视变形
查看>>
opencv保存图片路径包含中文乱码解决方案
查看>>
opencv图像分割2-GMM
查看>>
OpenCV(1)读写图像
查看>>
OpenCV:概念、历史、应用场景示例、核心模块、安装配置
查看>>
Openlayers中点击地图获取坐标并输出
查看>>
Openlayers图文版实战,vue项目从0到1做基础配置
查看>>
Openlayers实战:modifystart、modifyend互动示例
查看>>
Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
查看>>
Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
查看>>