No.1ベストアンサー
- 回答日時:
ターゲットにも依存しますが、次のようにすれば、おそらくサイズを知ることができると思います。
#define PRINT_SIZEOF(type) PRINT_SIZEOF_(type, __LINE__)
#define PRINT_SIZEOF_(type, line) \
void print_sizeof_##line() { asm volatile("size of " #type " is %0" :: "g"(sizeof(type))); }
PRINT_SIZEOF(struct foo)
Cのソースに上記のように書いておけば、アセンブルの段階で、
Error: no such instruction: `size of struct foo is $123'
というエラーが発生します。$123のところがstruct fooのバイト数です。
__LINE__マクロを使っているのは、同じソースファイルの中で、複数のPRINT_SIZEOFを使えるようにするためです。
No.3
- 回答日時:
#1です。
ちなみにC++であれば、もっと簡単になります。
template <typename T, int> struct type_;
#define PRINT_SIZEOF(type) inline void size_of_(type_<type, sizeof(type)>) {}
PRINT_SIZEOF(foo)
と書いてコンパイルすれば、
test.cc: In function `void size_of_(type_<foo, 123>)':
test.cc:6: error: `<anonymous>' has incomplete type
test.cc:3: error: declaration of `struct type_<foo, 123>'
のようなメッセージが出て、foo型が123バイトであることが分かります。
今回は、型が異なれば多重定義になるので、__LINE__を使った面倒なことはやめています。
No.2
- 回答日時:
gcc -Sとしてアセンブラリストを出させてみるのはいかがでしょう。
サイズの埋め込みが分かりやすいように
int func(void)
{
return sizeof(hogehoge);
}
という関数を作っておけば、見つけやすいかと思います
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語
-
gccを行ってもexeファイルが生...
-
VisualStudioでC++クラスを追加...
-
逆コンパイルと逆アセンブルの...
-
パソコン
-
今ってプログラミング言語は何...
-
UART通信の取説で,left floati...
-
どちのほうがすきですか?
-
int16_t の _t は何?
-
大量のデータを読み込んで表示...
-
C#でTreeViewのCheckBoxのサイ...
-
C#でログファイルにファイルパ...
-
Cの関数の引数のconst *charに...
-
const char** p;のとき、free(p...
-
C言語について。
-
コンソールアプリを作成するの...
-
プログラミングでArduinoのc++...
-
C言語をコンパイルするとコンピ...
-
あなたは、Excelはどうやって学...
-
MACで動く実行ファイルをWindow...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
パソコン
-
Windows Formアプリからコンソ...
-
c言語
-
【C言語】全角文字の配列を、全...
-
10進数からN進数に変換するプロ...
-
今ってプログラミング言語は何...
-
c言語でイベントフラグを使った...
-
C#でログファイルにファイルパ...
-
gccを行ってもexeファイルが生...
-
VisualStudio2022でC言語プログ...
-
c#のTLS1.2での通信について
-
const char** p;のとき、free(p...
-
VisualStudioでC++クラスを追加...
-
逆コンパイルと逆アセンブルの...
-
[C言語]fputsとfprintfの違い
-
ArduinoでMouse関数を使用して...
-
C++でデスクトップGUIアプリ開...
-
int16_t の _t は何?
-
VisualStudioで、コードを印刷...
おすすめ情報