博客
关于我
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/

你可能感兴趣的文章
NI笔试——大数加法
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>
NLP学习笔记:使用 Python 进行NLTK
查看>>
NLP:使用 SciKit Learn 的文本矢量化方法
查看>>
Nmap扫描教程之Nmap基础知识
查看>>
Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
查看>>
NMAP网络扫描工具的安装与使用
查看>>
NMF(非负矩阵分解)
查看>>
NN&DL4.1 Deep L-layer neural network简介
查看>>
NN&DL4.3 Getting your matrix dimensions right
查看>>
NN&DL4.8 What does this have to do with the brain?
查看>>
No 'Access-Control-Allow-Origin' header is present on the requested resource.
查看>>
No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
查看>>
No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
查看>>
No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
查看>>
No mapping found for HTTP request with URI [/...] in DispatcherServlet with name ...的解决方法
查看>>
No module named cv2
查看>>
No module named tensorboard.main在安装tensorboardX的时候遇到的问题
查看>>
No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
查看>>
No new migrations found. Your system is up-to-date.
查看>>