2024 / 11 «« ■ »» |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
meaning of mark :: nothing , comment
Pageview
Online Status
Profile
hHandleName = Fe+;
某メーカ勤務の怪しい会社員。
40代に突入しても不惑の域に達しない。
某メーカ勤務の怪しい会社員。
40代に突入しても不惑の域に達しない。
Recent Diary
Recent Comments
RSS & Atom Feed
2005/08/10
ちょっとお仕事
[Fe+の外部記憶]
ほう〜、なるほど。
あまりBarbarossa Blogには仕事の事は書かないようにしているのですが、ネタ的に面白かったので書いてみました。
今日、会社の同僚のMINEタソと仕事をしていてC++のクラスがどのようなサイズになるかというネタになったので調べてみました。
自宅に帰ってからもプログラムを作る男
その1・メンバ変数だけ
class CTest {
int a;
int b;
};
この場合には、単純に構造体と同じでsizeof(CTest) = 8になります。
(モチint=32Bitね)
その2・メンバ関数のみ
class CTest {
void Func( void ){ return; }
};
この場合、sizeof(CTest)は
1バイト
になります。
へぇ〜
その3・仮想関数の場合
class CTest {
virtual void Func( void ){ return; }
};
この場合にはsizeof(CTest)=4になります。
これは仮想関数アドレスを格納する関数ポインタテーブルへのポインタである4バイトが付加されるからという事です。
つまり、仮想関数がいくつ増えても、テーブルへのポインタなので4バイトからは増えません。
その4・staticメンバ変数を持つ場合
class CTest {
static int a;
static int b;
};
この場合にはsizeof(CTest)は
1バイト
になります。
その5・staticメンバ関数を持つ場合
class CTest {
static void Func( void ){ return; };
};
この場合もやっぱり1バイトのようです。
ラスト・staticメンバ変数と仮想関数とメンバ関数を持つ場合
class CTest {
static int a;
static int b;
virtual void VirtualFunc( void ){ return; };
void Func( void ){ return; };
};
・・・・結果は、
4バイト
でした。
どうやら、仮想関数のアドレステーブルへのポインタvptrの4バイトだけになるようです。
ちなみに、staticメンバ変数や、通常のメンバ関数はいくつあっても1バイトのままでした。
さらに上記にように、メモリを消費するようなメンバがいると、その1バイトすらなくなってしまうみたいですね。(オブジェクトとしてはメモリを使わないということかな?)
以上仕事ネタでした。
プログラム知らない方、ごめんなさい〜
あまりBarbarossa Blogには仕事の事は書かないようにしているのですが、ネタ的に面白かったので書いてみました。
今日、会社の同僚のMINEタソと仕事をしていてC++のクラスがどのようなサイズになるかというネタになったので調べてみました。
その1・メンバ変数だけ
class CTest {
int a;
int b;
};
この場合には、単純に構造体と同じでsizeof(CTest) = 8になります。
(モチint=32Bitね)
その2・メンバ関数のみ
class CTest {
void Func( void ){ return; }
};
この場合、sizeof(CTest)は
1バイト
になります。
へぇ〜
その3・仮想関数の場合
class CTest {
virtual void Func( void ){ return; }
};
この場合にはsizeof(CTest)=4になります。
これは仮想関数アドレスを格納する関数ポインタテーブルへのポインタである4バイトが付加されるからという事です。
つまり、仮想関数がいくつ増えても、テーブルへのポインタなので4バイトからは増えません。
その4・staticメンバ変数を持つ場合
class CTest {
static int a;
static int b;
};
この場合にはsizeof(CTest)は
1バイト
になります。
その5・staticメンバ関数を持つ場合
class CTest {
static void Func( void ){ return; };
};
この場合もやっぱり1バイトのようです。
ラスト・staticメンバ変数と仮想関数とメンバ関数を持つ場合
class CTest {
static int a;
static int b;
virtual void VirtualFunc( void ){ return; };
void Func( void ){ return; };
};
・・・・結果は、
4バイト
でした。
どうやら、仮想関数のアドレステーブルへのポインタvptrの4バイトだけになるようです。
ちなみに、staticメンバ変数や、通常のメンバ関数はいくつあっても1バイトのままでした。
さらに上記にように、メモリを消費するようなメンバがいると、その1バイトすらなくなってしまうみたいですね。(オブジェクトとしてはメモリを使わないということかな?)
以上仕事ネタでした。
プログラム知らない方、ごめんなさい〜
posted at 2005/08/10 3:52:26
lastupdate at 2005/08/10 3:57:13
【修正】
Comments
Post your Comment
Menu
Category
Pageview Ranking
Search
Link