[解決済み] インターロックドインクリーメント使用
2022-02-09 13:44:53
質問事項
について読んでいると インターロックドインクリーメント 渡される変数は32ビット境界にアラインされていなければならないという記述を目にしました。通常、このようなInterlockedIncrementを使用するコードを見たことがあります。
class A
{
public:
A();
void f();
private:
volatile long m_count;
};
A::A() : m_count(0)
{
}
void A::f()
{
::InterlockedIncrement(&m_count);
}
上記のコードはマルチプロセッサシステムで正しく動作しますか、それとももう少し気をつけるべきですか?
どのように解決するのですか?
コンパイラの設定に依存します。 しかし、デフォルトでは、8バイト以下は自然な境界でアラインされます。 したがって、int"は32ビット境界にアライメントされます。
また、"#pragma pack"指令を使用すると、コンパイル単位でアライメントを変更することができます。
なお、この回答はMicrosoft C/C++コンパイラを想定しています。 パッキングルールはコンパイラによって異なるかもしれません。 しかし、一般的には、私は 想定 Windows 用のほとんどの C/C++ コンパイラは、Microsoft SDK ヘッダでの作業を少し簡単にするために、同じパッキング・デフォルトを使用しているはずです。
関連
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された
-
[解決済み】C#のイベントとスレッドセーフについて
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない