SE、プログラマ、プロジェクトマネージャーの備忘録です。IT関連の情報を共有します。同じことで悩んでいる人の助けになればと思います。
ポインター関連の演算子について詳しくは、「ポインターに関連する演算子」をご覧ください。 どのポインター型も、暗黙的に void* 型に変換できます。 どのポインター型にも、値 null を割り当てることができます。 どのポインター型も、キャスト式を使用して、他のポインター型に明示的に変換できます。 また、任意の整数型をポインター型に、または任意のポインター型を整数型に変換することもできます。 これらの変換には、明示的なキャストが必要です。 次の例では、int* を byte* に変換しています。 ポインターは、変数の最下位バイト アドレスを指すことに注意してください。 int のサイズ (4 バイト) まで結果を連続してインクリメントする場合、変数の残りのバイトを表示することができます。 int number = 1024; unsafe { // Convert to byte: byt
以前このサイトとブログに,何度かアラインメントに関する記事を書きました (サイト内関連ページ参照). そのせいか「アラインメント」で検索して来てくれる人が多いので, 過去の記事に加筆修正してこのページを新たに作成しました. 加筆した点は次のとおりです. アラインメントとメモリアクセス回数の関係をわかりやすくするため, (ほんの少し) 図を導入しました. 「データがアラインされていないとメモリアクセス回数が増える」 と言葉で説明しているサイトは多いのですが, 図で示しているところはまだ見たことありません. アラインされていないアドレスにデータを書き込む場合, 読み出しの場合以上にメモリアクセス回数がかかる可能性があることを追記しました. 以前は「複合データ型 (配列,構造体,共用体) のアラインメント」はほとんど自明のことだと思っていたので軽く流していましたが, 意外なことにこれを解説してい
C言語で利用するsizeof(x)はxの正味のサイズではなく、 xのアラインメントの倍数に切り上げた値になる。 基本的なデータ型のアラインメントは、下に示すようにその型のサイズ に一致することが多い。 例外もあるのだが(詳しくはこちらを参考)、ここではとにもかくにも一致するとする。 では、複合データ型(構造体など)では具体的にどういったサイズになるのであろうか。 例題を使って考えてみよう。 ◆ 基本的なデータ型のアラインメント 構造体のアラインメントを考える前提として、 先にも述べたように、各データ型のサイズとアラインメントは以下とする。 ・char サイズ : 1バイト アラインメント : 1バイト ・short サイズ : 2バイト アラインメント : 2バイト ・int サイズ : 4バイト アラインメント : 4バイト ・dou
従来の32ビット環境に慣れてしまったプログラマがしばしば犯してしまうミスを交えつつ、32ビット環境から64ビット環境へ移行する際に注意すべき代表的なC言語のプログラミング例を紹介しよう。(特集:64ビットコンピューティング最前線) C MAGAZINE 2004年10月号第3特集「64ビットコンピューティング」より転載 64ビット環境へ移行する際の注意点 ここでは、従来の32ビット環境に慣れてしまったプログラマがしばしば犯してしまうミスを交えつつ、32ビット環境から64ビット環境へ移行する際に注意すべき代表的なC言語のプログラミング例を紹介します。 もちろん、32ビット環境でプログラムを書いたことのないプログラマにも有用な情報です。 ポインタをint型やlong型変数に代入しない ポインタをint型やlong型変数に代入し、それを操作してはいけません。 アセンブラまたはインラインアセンブラ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く