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

笔者正在学习uCOS-II,移植到ARM时考虑到数据类型的定义,但对于Keil MDK编译器的数据类型定义还是很模糊,主要就是区分不了short int、int、long 和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

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

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

时间: 2024-08-25 10:04:00

keil_4/MDK各种数据类型占用的字节数的相关文章

基本数据类型占用的字节数

32位编译器 变量类型 所占字节数 char 1个字节 char*(即指针变量) 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节) short int 2个字节 int 4个字节 unsigned int 4个字节 float 4个字节 double 8个字节 long 4个字节 long long 8个字节 unsigned long 4个字节 64位编译器 变量类型 所占字节数 char 1个字节 char*(即指针变量) 8个字节 short int 2个字节 in

java基本数据类型所占字节数

JAVA基本数据类型所占字节数是多少?(32位系统) byte     1字节 short    2字节 int      4字节 long     8字节 char     2字节(C语言中是1字节)可以存储一个汉字 float    4字节 double   8字节 boolean  false/true(理论上占用1bit,1/8字节,实际处理按1byte处理) JAVA是采用Unicode编码.每一个字节占8位.你电脑系统应该是 32位系统,这样每个int就是 4个字节 其中一个字节由8

学习指针变量占用内存字节数相关心得

在学习设置数据收发缓冲区时,做以下实验 void main () { LPBYTE m_data=new BYTE[16]; memcpy(m_data,"example",sizeof(m_data)); string str=" "; str[0]=m_data[3]; cout<<str<<endl; } 函数memcpy(m_data,"example",sizeof(m_data));将“example”在内存中

JAVA基本数据类型所占字节数是多少?

byte     1字节 short    2字节 int      4字节 long     8字节 char     2字节(C语言中是1字节)可以存储一个汉字 float    4字节 double   8字节 boolean  false/true(理论上占用1bit,1/8字节,实际处理按1byte处理) JAVA是采用Unicode编码.每一个字节占8位.你电脑系统应该是 32位系统,这样每个int就是 4个字节 其中一个字节由8个二进制位组成 Java一共有8种基本数据类型(原始数

C/C++基本数据类型所占字节数

关于这个基本的问题,很早以前就很清楚了,C标准中并没有具体给出规定那个基本类型应该是多少字节数,而且这个也与机器.OS.编译器有关,比如同样是在32bits的操作系统系,VC++的编译器下int类型为占4个字节:而tuborC下则是2个字节. 所以int,long int,short int的宽度都可能随编译器而异.但有几条铁定的原则(ANSI/ISO制订的): sizeof(short int)<=sizeof(int) sizeof(int)<=sizeof(long int) short

JAVA内存使用--如何计算一个Java对象占用的字节数

本文中,我们讨论一个问题:如何计算(或者说,估算)一个Java对象占用的内存数量? 通常,我们谈论的堆内存使用的前提是以"一般情况"为背景的.不包括下面两种情形: 某些情况下,JVM根本就没有把Object放入堆中.例如:原则上讲,一个小的thread-local对象存在于栈中,而不是在堆中. 被Object占用内存的大小依赖于Object的当前状态.例如:Object的同步锁是否生效,或者,Object是否正在被回收. 我们先来看看在堆中单个的Object长什么样子 在堆中,每个对象

字符串-不同的编码格式下所占用的字节数【转】

英文字母和中文汉字在不同的编码格式下,所占用的字节数也是不同的,我们可以通过下面的例子来看看在一些常见的编码格式下,一个英文字母和一个中文汉字分别占用多少字节. import java.io.UnsupportedEncodingException; public class EncodeTest { public static void printByteLength(String s, String encodingName) { System.out.print("字节数:");

10055 - Hashmat the Brave Warrior &amp; 各数据类型所占字节数 (C语言)

Problem A Hashmat the brave warrior Input: standard input Output: standard output Hashmat is a brave warrior who with his group of young soldiers moves from one place to another to fight against his opponents. Before fighting he just calculates one t

转:C/C++基本数据类型所占字节数

参考:http://blog.csdn.net/vast_sea/article/details/8076934 关于这个基本的问题,很早以前就很清楚了,C标准中并没有具体给出规定那个基本类型应该是多少字节数,而且这个也与机器.OS.编译器有关,比如同样是在32bits的操作系统系,VC++的编译器下int类型为占4个字节:而tuborC下则是2个字节. 所以int,long int,short int的宽度都可能随编译器而异.但有几条铁定的原则(ANSI/ISO制订的): sizeof(sho