エラー、バグ、質問 - ページ 2503 1...249624972498249925002501250225032504250525062507250825092510...3185 新しいコメント 削除済み 2019.07.08 11:53 #25021 Alexey Viktorov: では、どんなバグがあるのでしょうか? 2つの要素を2バイトずつ持つ配列を宣言し、本来であれば4バイトを取得します。バグはどこですか?何ですか? これなんです。 4にアラインして、2つの要素が2*8バイトを占有することになります。 申し訳ないが、そう書くと理解できないだろう。 十字架と類似している。 #include <iostream> struct alignas(4) A { short j; }; int main() { A q[2]; std::cout << sizeof(q) << std::endl; // 8 return 0; } 間違いはおそらくここではないのでは? TheXpert 2019.07.08 12:27 #25022 Vict: 申し訳ないが、そう書くと、このテーマを理解していないことになる。 いや、わかっていないようですね。 //g++ 5.4.0 #include <iostream> #pragma pack (push, 4) struct A { short j; }; #pragma pack (pop) int main() { A q[2]; std::cout << sizeof(q) << std::endl; // 4 return 0; } 削除済み 2019.07.08 13:48 #25023 TheXpert: いや、わかっていないようですね。 smallmicrosoftのものの#pragmaパックは非常に特殊なものです(その動作原理には今更ながら驚きました、率直なところ)。当然のことながら、標準的なアライナの動作は異なる。 こちらもどうぞ。 #include <iostream> struct A { short j; } __attribute__((aligned(4))); int main() { A q[2]; std::cout << sizeof(q) << std::endl; // 8 return 0; } TheXpert 2019.07.08 14:29 #25024 Vict: 小型ソフトの#pragmaパックは非常にクセモノです(今となってはその仕組みに驚かされます、正直なところ)。アライナスの動作が規格で違うのも頷けます。 おいおい) #include <iostream> struct A { short j; } alignas(4) ; int main() { A q[2]; std::cout << sizeof(q) << std::endl; // 4 return 0; } gccでも#pragma packは正常に動作しますし、あなたが書いたものは、単にgccの内部属性で、alignedとは異なる動作をするものです。 削除済み 2019.07.08 14:58 #25025 TheXpert: さあ、もう) gccでも#pragma packは正常に動作しますし、あなたが書いたものはgccの内部属性に過ぎず、alignedと同じようには動作しません。 では、この例は何を示しているのでしょうか。アライナの使い方がわかっていないこと?コンパイラーも悪態をつくコード。 1.cc:7:3: warning: attribute ignored in declaration of 'struct A' [-Wattributes] 7 | } alignas(4) ; | ^~~~~~~ 1.cc:7:3: note: attribute for 'struct A' must follow the 'struct' keyword プラグマパックは、gccが互換性のためにのみサポートする、奇妙で小さなソフティーの創造物です。 TheXpert 2019.07.08 15:00 #25026 Vict: では、この例は何を示しているのでしょうか。アライナの使い方がわからないと? そうですね、失敗しちゃいました。 これが正しいコードです。 #include <iostream> struct alignas(4) A { short j; } ; int main() { A q[2]; std::cout << sizeof(q) << std::endl; // 8 return 0; } ということで、alignasはパッケージングに類するものではありません。 というのも、同じgcc(smallsoftなしの場合)では、デフォルトのパッキング倍率は8だからです。 なぜなら #include <iostream> struct A { short j; }; struct B { short j; long long k; }; int main() { A q[2]; B r[2]; std::cout << sizeof(q) << " " << sizeof(r) << std::endl; // 4 32 return 0; } が、alignas(8) を使って #include <iostream> struct alignas(8) A { short j; }; struct alignas(8) B { short j; long long k; }; int main() { A q[2]; B r[2]; std::cout << sizeof(q) << " " << sizeof(r) << std::endl; // 16 32 return 0; } TheXpert 2019.07.08 15:12 #25027 また、これはデフォルトの動作であり、ソフトウェアとの互換性のためではないことに注意してください。 削除済み 2019.07.08 15:26 #25028 TheXpert: また、これはデフォルトの動作であり、Smallmicrosoftとの互換性を保つためのものではないことに注意してください。 その発想はない。例ではすべてうまくいっています、問題はありません。デフォルト - 構造体のアライメント == メンバー間の最も厳しい要求アライメントを取る。 struct {char;}== 1、struct {char;short} == 2、struct {char;int} == 4、など。どこもそうなんですね。また、long long == eight なので、alignas は何の効果もない。 TheXpert 2019.07.08 15:45 #25029 Vict: その発想はない。例ではすべてうまくいっているので、問題はないと思います。 たしかに、この例は指標になりませんね。 要するに、mql pack は #pragma pack として動作し、alignas ではないということです。 Francuz 2019.07.08 16:22 #25030 人、情報を共有する。アライメントを何に使うのか? 1...249624972498249925002501250225032504250525062507250825092510...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
では、どんなバグがあるのでしょうか?
2つの要素を2バイトずつ持つ配列を宣言し、本来であれば4バイトを取得します。バグはどこですか?何ですか?
これなんです。
4にアラインして、2つの要素が2*8バイトを占有することになります。
申し訳ないが、そう書くと理解できないだろう。
十字架と類似している。
間違いはおそらくここではないのでは?
申し訳ないが、そう書くと、このテーマを理解していないことになる。
いや、わかっていないようですね。
いや、わかっていないようですね。
smallmicrosoftのものの#pragmaパックは非常に特殊なものです(その動作原理には今更ながら驚きました、率直なところ)。当然のことながら、標準的なアライナの動作は異なる。
こちらもどうぞ。
小型ソフトの#pragmaパックは非常にクセモノです(今となってはその仕組みに驚かされます、正直なところ)。アライナスの動作が規格で違うのも頷けます。
おいおい)
gccでも#pragma packは正常に動作しますし、あなたが書いたものは、単にgccの内部属性で、alignedとは異なる動作をするものです。
さあ、もう)
gccでも#pragma packは正常に動作しますし、あなたが書いたものはgccの内部属性に過ぎず、alignedと同じようには動作しません。
では、この例は何を示しているのでしょうか。アライナの使い方がわかっていないこと?コンパイラーも悪態をつくコード。
プラグマパックは、gccが互換性のためにのみサポートする、奇妙で小さなソフティーの創造物です。
では、この例は何を示しているのでしょうか。アライナの使い方がわからないと?
そうですね、失敗しちゃいました。
これが正しいコードです。
ということで、alignasはパッケージングに類するものではありません。
というのも、同じgcc(smallsoftなしの場合)では、デフォルトのパッキング倍率は8だからです。
なぜなら
が、alignas(8) を使って
また、これはデフォルトの動作であり、Smallmicrosoftとの互換性を保つためのものではないことに注意してください。
その発想はない。例ではすべてうまくいっています、問題はありません。デフォルト - 構造体のアライメント == メンバー間の最も厳しい要求アライメントを取る。
struct {char;}== 1、struct {char;short} == 2、struct {char;int} == 4、など。どこもそうなんですね。また、long long == eight なので、alignas は何の効果もない。
その発想はない。例ではすべてうまくいっているので、問題はないと思います。
たしかに、この例は指標になりませんね。
要するに、mql pack は #pragma pack として動作し、alignas ではないということです。