当前位置: 首页 > news >正文

keil_4/MDK各种数据类型占用的字节数

 

笔者正在学习uCOS-II,移植到ARM时考虑到数据类型的定义,但对于Keil MDK编译器的数据类型定义还是很模糊,主要就是区分不了short intintlong long int占用多少字节。为了得到一个权威的答案,改用编译器自身得出。

一、先定义几个变量,用于存放各数据类型的字节数。

//#include<LPC214x.H>

#include<stdio.h>

unsigned char a,b,c,d,e,f,g;

main()

{

   a=sizeof(char);

   b=sizeof(short int);

   c=sizeof(int);

   d=sizeof(long);

   e=sizeof(long int);

   f=sizeof(float);

   g=sizeof(double);

   while(1);

}

 

三、查看各地址存放的值。View---memory Window

 

由上图可知得出: 

 

      指针类型 *  统一为  4字节

 

char占用1个字节

short int占用2字节

int占用4字节

long占用4字节

long int占用4字节

float占用4字节

double占用8字节

 

我们即可这样定义宏:

typedef unsigned char    uint8;      // 无符号8位整型变量 typedef signed   char    int8;       // 有符号8位整型变量 typedef unsigned short   uint16;     // 无符号16位整型变量 typedef signed   short   int16;      // 有符号16位整型变量 typedef unsigned int     uint32;     // 无符号32位整型变量 typedef signed   int     int32;      // 有符号32位整型变量 typedef float            fp32;       // 单精度浮点数(32位长度) typedef double           fp64;       // 双精度浮点数(64位长度)

    ②查看各变量的存放地址。View---Symbols Window。    下面是real view官方文档的说明:

 

 

常数

意义

十六进制值

CHAR_MAX

char的最大值

255

0xFF

CHAR_MIN

char的最小值

0

0x00

SCHAR_MAX

signed char的最大值

127

0x7F

SCHAR_MIN

signed char的最小值

–128

0x80

UCHAR_MAX

unsigned char的最大值

255

0xFF

SHRT_MAX

short的最大值

32 767

0x7FFF

SHRT_MIN

short的最小值

–32 768

0x8000

USHRT_MAX

unsigned short的最大值

65 535

0xFFFF

INT_MAX

int的最大值

2 147 483 647

0x7FFFFFFF

INT_MIN

int的最小值

–2 147 483 648

0x80000000

LONG_MAX

long的最大值

2 147 483 647

0x7FFFFFFF

LONG_MIN

long的最小值

–2 147 483 648

0x80000000

ULONG_MAX

unsigned long的最大值

4 294 967 295

0xFFFFFFFF

 

 

LLONG_MAX

long long的最大值 

9.2E+18

0x7FFFFFFF FFFFFFFF

LLONG_MIN

long long的最小值

–9.2E+18

0x80000000 00000000

ULLONG_MAX

unsigned long long的最大值 

1.8E+19

0xFFFFFFFF FFFFFFFF

 

附加:

 四:  结构体成员引用,往往通过内存偏移计算,引用另外成员变量。这时需注意的有:

   eg

   sturct  link{  unsinged int *a;

                  unsigned int *b;

                  unsigned int  c;

                 unsigend  int d;           

            };  struct link  link1;

      unsigned int e=link1->c;     uint *  f=   &link->a;  

      uint  *g= *f+1);// **g=link1->b

 成员变量偏移计算注意:得到一个成员函数的内存地址,步进决定于运算成员的数据类型,如(g=f+11表示一个单位int长度,uint 2字节),这个最终得参考内存对齐原理,对齐了肯定遵从上规则

   2 所取的内存运算后的地址赋值给gg的类型必须跟原基地址(原成员)的一致。 否则,运算出错

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/Ph-one/p/4001314.html

相关文章:

  • 汽车OBD接口定义
  • CAN/J1850/
  • STM32.BOOT
  • DMA(STM32)
  • STM32.printf
  • STM32各个文件介绍、uCOSII文件介绍
  • Cortex-M3基础
  • Program Size
  • KEIL中常见问题
  • LM2596、LM2576
  • STM32硬件IIC
  • CP2102
  • SMBus
  • 0x30、0x37
  • MOV/MOVX/MOVC、RAM/ROM
  • 【译】JS基础算法脚本:字符串结尾
  • 【mysql】环境安装、服务启动、密码设置
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • AWS实战 - 利用IAM对S3做访问控制
  • Django 博客开发教程 16 - 统计文章阅读量
  • Fastjson的基本使用方法大全
  • JS专题之继承
  • Odoo domain写法及运用
  • PAT A1092
  • Python爬虫--- 1.3 BS4库的解析器
  • redis学习笔记(三):列表、集合、有序集合
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • SQL 难点解决:记录的引用
  • Vue 重置组件到初始状态
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 我与Jetbrains的这些年
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 正则表达式
  • 昨天1024程序员节,我故意写了个死循环~
  • #NOIP 2014# day.1 T2 联合权值
  • #ubuntu# #git# repository git config --global --add safe.directory
  • $.ajax()
  • (1)常见O(n^2)排序算法解析
  • (java)关于Thread的挂起和恢复
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (三) diretfbrc详解
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (转)3D模板阴影原理
  • (转)ObjectiveC 深浅拷贝学习
  • (转)四层和七层负载均衡的区别
  • ./configure,make,make install的作用(转)
  • .apk文件,IIS不支持下载解决
  • .NET MVC 验证码
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .NET运行机制
  • .net中生成excel后调整宽度