C言語型データのバイト数

2532 ワード

一、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)<=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バイト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:8バイトunsigned long:4バイトunsigned long:4バイト
64ビットコンパイラchar:1バイトchar*(ポインタ変数):8バイトshort:2バイトint:4バイトunsigned int:4バイトfloat:4バイトdouble:8バイトlong:8バイトlong long:8バイトunsigned 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
"
,map_base + 256/4); printf("sizeof(u8): %d
"
,sizeof(u8)); printf("sizeof(u16): %d
"
,sizeof(u16)); printf("sizeof(u32): %d
"
,sizeof(u32)); return 0; }