問題タブ [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 投票する
9 に答える
4686 参照

c - Cの構造体にshortが4バイトとして格納されるのはなぜですか?

私は次の2つの構造体を持っています:

問題は、sizeof(Content)が160を返すことです。構造体は、11個のshort、6個のint、76個のchar、7個のfloat、1個のdoubleで構成され、合計で158バイトになります。私は3回カウントしましたが、まだ2バイトの違いがあります。

構造体の各変数の位置を出力するための小さなコードを記述しましたが、突然float wlen4バイトかかることがわかりました。私のコードは次のとおりです。

出力は次のとおりです。

コンパイラはMSVC8であり、UNICODEは定義されておらず、他のマクロも定義されていません。x86です。

gccバージョン3.4.4で同じコードをコンパイルしようとしましたが、出力は同じです。 Sizeof short content.wlen: 4

誰かが私にこれを説明できますか?

前もって感謝します。

編集:答えてくれてありがとう!私は今それを持っています。

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

c - 異なるタイプへのポインターのサイズが異なるプラットフォームはありますか?

C標準では、さまざまなタイプへのポインターをさまざまなサイズにすることができます。たとえばsizeof(char*) != sizeof(int*)、許可されています。ただし、ポインタをavoid*に変換してから元の型に戻す場合は、元の値と同じであると比較する必要があります。したがって、論理的にはsizeof(void*) >= sizeof(T*)、すべてのタイプTについて正しいですか?

現在使用されている最も一般的なプラットフォーム(x86、PPC、ARM、64ビットバリアントなど)では、すべてのポインターのサイズは、ポイントされたタイプに関係なく、ネイティブレジスタサイズ(4または8バイト)に等しくなります。異なるタイプへのポインターが異なるサイズを持つ可能性がある難解なまたは組み込みのプラットフォームはありますか?私は特にデータポインタについて質問していますが、関数ポインタのサイズが異常なプラットフォームがあるかどうかも知りたいと思います。

私は間違いなくC++のメンバーへのポインターとメンバーへのポインター関数について質問していません。これらは一般的なプラットフォームでは通常とは異なるサイズを取り、クラスへのポインタのプロパティ(非多形、単一継承、多重継承、仮想継承、または不完全型)に応じて、1つのプラットフォーム内で変化することもあります。

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

c - 32 ビットとさまざまな 64 ビット データ モデルの sizeof(size_t) は何ですか?

64 ビット システムでsizeof(unsigned long)は、システムによって実装されるデータ モデルによって異なります。たとえば、LLP64 (Windows) では 4 バイト、LP64 (Linux など) では 8 バイトです。あるべきものは何sizeof(size_t)ですか?データモデルによって異なりますsizeof(long)か? もしそうなら、どのように?


参考文献:

ウィキペディアの 64 ビット データ モデル

0 投票する
5 に答える
2073 参照

c - なぜ2つの引数でsizeof演算子を呼び出すのですか?

私は最近、次のようなコードに出くわしました。

varタイプはどこですか)

sizeofオペレーターにとって2つの引数のように見えるものを見て、私は非常に驚きました。ISO / ANSI C99規格をすばやくスキャンしても、秘密は見つかりませんでした。そこにコンマを許可する文法の読み方を思い付くことができませんでした。

Googleコードを検索すると、いくつかのPPCコードでこの構文の例を見つけることができました。

これはPPC固有の構文ですか?どういう意味ですか?

編集:私が見ていたものとリンクされたコードの両方が、WindRiverDiabコンパイラに固有の構文であることがわかりました:

sizeof(type、int-const):

int-constが0の場合、 sizeofはタイプのバイト単位のサイズを返します。

int-constが1の場合、 sizeofは型の配置を返します。

int-constが2の場合、 sizeofは、型の型を指定する整数定数を返します。値については、 Diab C /C++ユーザーズガイドで「sizeof演算子」を検索してください 。

うわー、彼らは本当にsizeof演算子の意味を過負荷にしました。

EDIT2:完全なドキュメントはここにあります:http ://www.vxdev.com/docs/vx55man/diab5.0ppc/c-additi.htm#3001432

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

c - メモリを操作するときに sizeof( char ) を掛ける必要がありますか?

malloc を使用して同様のメモリ操作を行う場合、sizeof( char ) が常に 1 であることに依存できますか?

たとえば、 type の N 個の要素にメモリを割り当てる必要がありcharます。必要に掛けていsizeof( char )ます:

または、 sizeof( char ) が常に 1 であることを信頼して、乗算をスキップできますか

コンパイル中に評価されることを完全に理解してsizeofおり、コンパイラは乗算をコンパイルすることさえできるため、パフォーマンスの低下は最小限に抑えられ、ほとんどの場合ゼロになります。

私は主にコードの明瞭さと移植性について質問しています。この乗算は型に必要ですcharか?

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

c - unsigned char * が指すメモリ領域のサイズは?

わかりました、これが以前に尋ねられたことは知っていますが、検索した後、適切な答えが見つかりませんでした。

バッファー (unsigned char *) を base64 に変換する必要があります。使用している base64 関数はパラメーターとして次のように取ります。

は文字列int srclenの長さですsrc

私の質問は、バッファの長さをどのように取得するかです。いいえ、null で終了していません。いいえ、必要ありませんsizeof(BYTE)srclenそのバッファをbase64に変換できるように、何を渡すかを知る必要があります。

編集

ここに私がやっていることを示すいくつかのコードがあります:

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

c# - .NETリフレクション:クラスのフィールドのサイズを決定します

目標:クラスのフィールドのサイズ(バイト単位)をプログラムで決定すること。たとえば、以下のコメントを参照してください...

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

c# - Marshal.SizeOf を使用して構造体のフィールド サイズを無視するにはどうすればよいですか?

Marshal.SizeOf を使用して構造体サイズの計算でフィールドを無視する方法はありますか

元:

現在サイズは4です。サイズを2にしたいです。これを行う方法はありますか?

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

c++ - C++ マクロ条件で型のサイズを取得する

c ++でこのようなことを行う方法はありますか?何らかの理由で sizeof を使用できないようです?

0 投票する
21 に答える
42790 参照

c - sizeof を使用しないデータ型のサイズ

たとえば、データ型があり、その型の変数またはポインターを宣言せずに、そしてもちろん演算子Xを使用せずに、そのサイズを知りたいです。sizeof

これは可能ですか?データ型のサイズと範囲を含む標準のヘッダー ファイルを使用することを考えましたが、それはユーザー定義のデータ型では機能しません。