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

你可能感兴趣的文章
mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
查看>>
MySQL Server 5.5安装记录
查看>>
mysql server has gone away
查看>>
mysql slave 停了_slave 停止。求解决方法
查看>>
MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
查看>>
MYSQL sql语句针对数据记录时间范围查询的效率对比
查看>>
mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
查看>>
mysql Timestamp时间隔了8小时
查看>>
Mysql tinyint(1)与tinyint(4)的区别
查看>>
mysql union orderby 无效
查看>>
mysql v$session_Oracle 进程查看v$session
查看>>
mysql where中如何判断不为空
查看>>
MySQL Workbench 使用手册:从入门到精通
查看>>
mysql workbench6.3.5_MySQL Workbench
查看>>
MySQL Workbench安装教程以及菜单汉化
查看>>
MySQL Xtrabackup 安装、备份、恢复
查看>>
mysql [Err] 1436 - Thread stack overrun: 129464 bytes used of a 286720 byte stack, and 160000 bytes
查看>>
MySQL _ MySQL常用操作
查看>>
MySQL – 导出数据成csv
查看>>
MySQL —— 在CentOS9下安装MySQL
查看>>