1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

C言語の基礎 (メモリ構造) NO.3 備忘録

Posted at

今までの勉強で、メモリにはデータが保存でき、そのデータの保存場所にはアドレスが付いていることがわかった。

#1つのアドレスにどれだけのデータが保存できる?
1byte(8ビット)のデータが格納できる。

つまり、1byteごとにアドレスが振られていることになる。

char型のデータは1アドレスにデータが格納されている。
int型のデータは4アドレスぶち抜きで格納されている。

test.cpp
  char       a;
  short      b;
  int        c;
  long       d;
  long long  e;
  float      f;
  double     g;
  
  CCLOG("char型      :%p",&a);
  CCLOG("short型     :%p",&b);
  CCLOG("int型       :%p",&c);
  CCLOG("long型      :%p",&d);
  CCLOG("long long型 :%p",&e);
  CCLOG("float型     :%p",&f);
  CCLOG("double型    :%p",&g);

実行結果
cocos2d: char型 :0x16fd4922f
cocos2d: short型 :0x16fd4922c
cocos2d: int型 :0x16fd49228
cocos2d: long型 :0x16fd49220
cocos2d: long long型:0x16fd49218
cocos2d: float型 :0x16fd49214
cocos2d: double型 :0x16fd49208

このようにアドレスは16進数で表す。
0→1→2→3→4→5→6→7→8→9→A→B→C→D→E→F

#なぜアドレスを16進数で表現するか
16進数では2桁でちょうど1byteの数値を表現できるから。

cocos2d: char型 :0x16fd4922f
cocos2d: short型 :0x16fd4922c
ここに注目してみる。
short型
0x16fd4922c
0x16fd4922d
の2byteを使用していることがわかる。

次のchar型
0x16fd4922f

となっており、ちょうど1byte分(0x16fd4922e)が未使用になっていることがわかる。

これは、__メモリ・アライメント(位置合わせ)__という。

#メモリアライメント
64ビットのPCを使用している場合、64ビットのCPUは一度に64ビット、つまり8バイトのデータのやり取りができる。
そのときに、アクセスするデータがアクセスしやすいアドレスに入っていると効率良くアクセスできる。

メモリの未使用領域ができても、利用効率をあげるために、非連続的に確保している。

1
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?