C语言类型数据所占字节数

一、volatile关键字

转载自:
https://www.cnblogs.com/yc_sunniwell/archive/2010/06/24/1764231.html

volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。

二、C语言类型数据所占字节数

C语言类型数据所占字节数和机器字长及编译器有关系:
所以,int,long int,short int的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的):
1 sizeof(short int)<=sizeof(int)
2 sizeof(int)<=sizeof(long int)
3 short int至少应为16位(2字节)
4 long int至少应为32位。

unsigned 是无符号的意思。

例如:
16位编译器
char : 1个字节
char*(即指针变量): 2个字节
short int : 2个字节
int: 2个字节
unsigned int : 2个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节

32位编译器
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
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个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节

三、测试


#include  

typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned long u32;


int main()
{   
    u32 *map_base =(u32 *)0x1000000;//地址强制转换
    printf("%p\n",map_base + 256/4); 

    printf("sizeof(u8): %d\n",sizeof(u8));
    printf("sizeof(u16): %d\n",sizeof(u16));
    printf("sizeof(u32): %d\n",sizeof(u32));

    return 0;
}

你可能感兴趣的:(Linux,C学习)