問題タブ [sizeof]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
16 に答える
476620 参照

c - 'sizeof'(配列を指すポインター)を見つける方法は?

まず、ここにいくつかのコードがあります:

ptr(32ビットシステムでは4バイトであるサイズを指定するのではなく)ポイントしている配列のサイズを確認する方法はありますか?

0 投票する
6 に答える
9210 参照

c++ - C++ 構造体フィールドから個々のフィールドのサイズを取得する

短いバージョンは次のとおりです。C++ フィールドの個々のフィールドのサイズ (ビット単位) を知るにはどうすればよいですか?

明確にするために、私が話している分野の例:

Test オブジェクト全体のサイズを取得するのは簡単です。

通常の構造体メンバーを取得できます

Test::field4 など、個々のフィールドのサイズを取得する方法を知りたいです。上記の通常の構造体メンバーの例は機能しません。何か案は?または、誰かがそれが機能しない理由を知っていますか? sizeof はサイズをバイト単位で返すだけなので、役に立たないことはかなり確信していますが、それ以外のことを知っている人がいれば、私はすべて耳を傾けます。

ありがとう!

0 投票する
4 に答える
2112 参照

c++ - sizeof とクラスメンバー関数に関する質問

B のオブジェクトを作成すると、

fn() のメモリはどこにありますか?

オブジェクトに fn() のメモリ位置を指すポインタはありますか?

はいの場合、オブジェクトにポインターがまったくないかのように sizeof(B) が値を返すのはなぜですか?

0 投票する
7 に答える
35233 参照

c# - x64のsizeof(int)?

C#.NETプロジェクトで実行sizeof(int)すると、戻り値は4になります。プロジェクトの種類をx64に設定したのに、なぜ8ではなく4と表示されるのでしょうか。これは、マネージコードを実行しているためですか?

0 投票する
2 に答える
3902 参照

delphi - メンバーのサイズを含むオブジェクトのバイト サイズ

(デバッグとロギングのために) オブジェクトのサイズをバイト単位で知りたいのですが、好きではありません

しかし、「深いサイズ」のように。たとえば、オブジェクトにハッシュ マップまたはリストが含まれている場合、そのハッシュ マップまたはリストに必要な実際のサイズを結果に追加する必要があります。追加せずにこれを行う方法はありますか

あらゆる小さなオブジェクトに?

ばかげた質問かもしれませんが、試してみます;)

編集:ほぼ同じ質問が見つかりました:

Delphi での再帰クラス インスタンスのサイズ

私は、質問を閉じることができると思います。ごめんなさい!

0 投票する
9 に答える
1998 参照

c++ - sizeof(*this) は間違った値を返します

C というクラスがあります。C には次のように宣言されたメンバー変数があります。

C 内から sizeof(*this) を呼び出すと、0x216 バイトの値が返されます。

C 内の他の場所では、markerStart = false; を行います。

この呼び出しは、markerStart を false に設定するのではなく、実際にはメモリ内の次のクラスの開始を破壊しています!

逆アセンブルされたコードを見ると、次のことがわかります。

2 番目の移動命令は、この + 0x218 のバイトを 0 に設定していますが、クラスの長さが 0x216 バイトしかないため、これはメモリを破壊しています!

コメントに応じて、それは間違いなくmarkerStart = false命令です。逆アセンブラー ビューとメモリ ビュー (およびデータ ブレークポイントを使用して Windbg を使用) で発生する様子を見ることができます。次のクラスの最初のバイトがゼロに設定され、vftbl ポインタが台無しになります。

注:markerStart のアドレスを取得して、これから減算すると、0x211 が得られます。

この問題を解決するためにどこから始めるべきかについて、誰かが私に手がかりを与えることができますか?

更新: ご協力ありがとうございます。コードがなければ、この問題を解決することはほぼ不可能でした。私が探していたのは、どこから探し始めるかについてのヒントでした。あなたのほとんどは素晴らしいヒントを提供してくれました。ありがとうございます!

私はついに問題を見つけました。この場合、アラインメントは 1 つのクラスで設定されており、重要なコード ブロックの後に正しくリセットされていませんでした。クラス C の宣言の直前に、アラインメントに問題のあるクラスがたまたまコンパイルされたため、問題が発生しました。

0 投票する
8 に答える
73302 参照

c++ - C/C++ の共用体のサイズ

C/C++ の共用体のサイズは? その中の最大のデータ型のサイズですか?もしそうなら、共用体のより小さいデータ型の 1 つがアクティブな場合、コンパイラはどのようにスタック ポインタを移動するかを計算しますか?