[解決済み] mallocはアライメントをどのように理解しているのですか?
質問
より抜粋したものです。 こちら
<ブロッククオートpw = (widget *)malloc(sizeof(widget));
は生のストレージを確保します。実際 malloc 呼び出しはストレージを割り当てます 十分な大きさがあり オブジェクトを保持するために適切に整列された 型の ウィジェット
も参照してください。 高速pImpl ハーブ・サッターからだという。
アライメント . 任意のメモリ アライメント. 割り当てられた任意のメモリ 動的に new や malloc を使用した場合、適切にアライメントされることが保証されています。 に対して しかし、動的に割り振られないバッファは、どのような型であっても そのような保証はない
これについては興味があるのですが、mallocはどのようにしてカスタムタイプのアライメントを知るのでしょうか?
どのように解決するのですか?
アライメント要件は再帰的である。任意の
struct
は、単純にそのメンバの中で最大のアライメントであり、これは再帰的に理解される。
例えば、各基本型のアライメントがそのサイズと等しいと仮定すると(これは一般的には常に正しいとは限らない)。
struct X { int; char; double; }
は、アライメントが
double
の倍数になるようにパディングされます(例:4 (int), 1 (char), 3 (padding), 8 (double)).このとき
struct Y { int; X; float; }
のアライメントを持ちます。
X
のアライメントと同じであり、最大である。
double
であり、かつ
Y
がそれなりにレイアウトされている。4 (int), 4 (padding), 16 (X), 4 (float), 4 (padding) となります。
(すべての数値は例であり、お使いのマシンによって異なる可能性があります)。
したがって、基本的な型に分解することで、基本的な整列は一握りだけ知っていればよく、その中でもよく知られた最大のものがあります。C++では、型まで定義しています。
max_align_t
そのアライメント
は
その最大のアライメント
すべて
malloc()
は、その値の倍数であるアドレスを選ぶ必要があります。
関連
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] mallocとcallocの違い?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む