打印
[CW32F003系列]

变量所占内存的区别

[复制链接]
177|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
iyoum|  楼主 | 2024-5-26 22:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

不同位数的CPU(单片机)的变量所占的内存也不尽相同,具体如下表所示。

8位16位32位64位
char1 Byte1 Byte1 Byte1 Byte
short int2 Byte2 Byte2 Byte2 Byte
int2 Byte2 Byte4 Byte4 Byte
long int4 Byte4 Byte4 Byte8 Byte
long long8 Byte8 Byte8 Byte8 Byte
float4 Byte4 Byte4 Byte4 Byte
double8 Byte8 Byte8 Byte8 Byte
指针1 Byte2 Byte4 Byte8 Byte

注:
1)上述表格适用于KEIL C51 和 KEIL MDK两个版本中,不一定适用于其它编辑器,具体内容,请查看KEIL软件手册。
2)CPU的位数不能决定int占几个字节,int是一个关键字,只能本编译器识别,CPU不能识别int。对于C语言,同一32位系统PC机上,TC2.0编译器给int分配2个字节,VC6.0给int分配4个字节。


使用特权

评论回复
沙发
Annie556| | 2024-6-6 17:13 | 只看该作者
变量所占内存的区别主要取决于变量的类型和作用域

使用特权

评论回复
板凳
Carina卡| | 2024-6-6 18:19 | 只看该作者
不同类型的变量在内存中占用的空间大小是不同的。例如,整型变量通常占用4个字节(32位系统)或8个字节(64位系统),而字符型变量通常占用1个字节

使用特权

评论回复
地板
Charlotte夏| | 2024-6-6 19:22 | 只看该作者
作用域不一样,变量的作用域决定了它在内存中的存储位置和生命周期

使用特权

评论回复
5
Alina艾| | 2024-6-6 20:30 | 只看该作者
全局变量在程序运行期间一直存在,存储在静态数据区或全局数据区

使用特权

评论回复
6
Carmen7| | 2024-6-6 21:33 | 只看该作者
一般来说,局部变量在函数或代码块内部定义,存储在栈上,并在函数或代码块执行完毕后被释放

使用特权

评论回复
7
Betty996| | 2024-6-6 22:46 | 只看该作者
变量的存储方式也会影响内存的分配。静态变量和全局变量在程序启动时就会被分配内存,并一直存在于静态数据区或全局数据区

使用特权

评论回复
8
Betty1299| | 2024-6-7 07:36 | 只看该作者
其实,动态分配的变量(如通过malloc函数分配的内存)存储在堆上,需要手动释放内存

使用特权

评论回复
9
Estelle1999| | 2024-6-7 09:01 | 只看该作者
对齐方式不一样,为了提高内存访问的效率,编译器通常会对变量进行对齐。对齐方式可以使得变量在内存中按照特定的字节对齐,以提高访问速度。对齐方式可能会导致变量之间存在一些填充字节,增加了内存的占用

使用特权

评论回复
10
Charlene沙| | 2024-6-7 10:12 | 只看该作者
需要注意的是,不同的编译器和编译选项可能会对变量的内存分配方式有所不同

使用特权

评论回复
11
Emily999| | 2024-6-7 12:02 | 只看该作者
我建议哈,在编写程序时,应该根据具体的编译环境和需求来合理使用变量,避免内存浪费和访问错误。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

2988

帖子

1

粉丝