そもそもC言語のアライメントに関して本当に理解してやっている人はいるんですか?
理屈の話ではなく一般的にはx86CPUなら4バイト境界にアラインさせるのが一番効率がよいと言われています。
x86はメモリアクセスに寛容だから無理にアラインさせなくても一応アクセスは可能。
(逆に言うならばメモリの節約が可能)
メモリを節約しなければいけない状況
アクセス効率を重視する状況
などそれぞれの要件によってどのようにアライメントを揃えるかというのは変わってくると思います。
では、たまに見る
「2バイト整数は2の倍数のアドレスに配置・アラインさせる」
という記述は何ですか?
これは何を目的としたアラインのさせかたなんですか?
(まぁ、本当にアクセス効率を重視したいなら個々のアライメントというよりある程度の大きさのデータ配置を気にしたほうがいいのかな?)
リンク内容

CPU とデータ型によって異なるが
⇒これはわかる。
⇒つまり1バイト整数のアラインメントは1バイト, 2バイト整数のアラインメントは2バイト, 4バイト整数/単精度浮動小数のアラインメントは4バイト, 8バイト倍精度浮動小数のアラインメントは8バイトである.
一般って何?
理解力が低い私にはとてもじゃないけど理解できない記事でした。
「C言語のアライメント」って何ですか?
C#とPythonで画像データの交換をしていますが、アライメントを整えないと画像が乱れます。物理メモリへのアクセスに限ったことでもありません。
↑それは画像のピクセル幅を4nにしろとか、そーゆーやつのことですか?
>「C言語のアライメント」って何ですか?
用語が適切ではありませんでした。
ふつうに"アライメント"です。
>Q71
今回のはメモリのほう限定で・・・
「2バイト整数は2の倍数のアドレスに配置・アラインさせる」
という記述をよく見ると言いますが、検索してもでてきませんでした。aligneさせた目的が何だったのかは前後の文脈がわからないと正確なことは言えないのではないかと思います。あなたが記述を見たという書籍なりサイトなりを明記して貰えますか?
確かにそうですね。
今探します
見つけたらリンク載せます
追記しました。
そのサイトは更新はされているようですが、C11以降にある_Alignofや_Alignasに対する記述がないので調査の仕方や調整の仕方が中途半端な気がします。こんな質問をするのですから、C11の_Alignofや_Alignasはもちろん知っていますよね?
わかりません
C11って何ですか?
そのサイトに記述されているのでしょうか?(C11で検索をかけても出てこなかった)
ぐぐっても機関車のC11しか出てきませんでした。
教えていただけると助かります。
助かります。
> 一般的にはx86CPUなら4バイト境界にアラインさせるのが一番効率がよいと言われています。
文脈からして、1バイトや2バイトの整数を1バイトや2バイトでアラインさせるより4バイトでアラインさせた方が読み書きが高速ということですね。
そのようなことは寡聞にして知りませんが、きちんとしたソースはありますか?
> 一般って何?
文中に「一般」という言葉はありませんが、どこを指しているのでしょう。
> x86?
CPUによって異なると言っているのに、なぜ1つのCPUだけを示すのですか?
何バイト境界にアラインすればよいか (これをアラインメント注4 (alignment) という) は,CPU とデータ型によって異なるが,一般には2の冪乗 (1,2,4,8,16,…) になる.
ここですね。解釈によって変わる気がする
>そのようなことは寡聞にして知りませんが、きちんとしたソースはありますか?
そういえばキチンとしたソースというのはない。
逆に僕はキチンとしたソース(日本語)を見つけられていません。
キチンとしたものを見つけられていたら
アライメントのことでこんなに足踏みし続けることはなかった。
>CPUによって異なると言っているのに、なぜ1つのCPUだけを示すのですか?
確かにそうですね。消します
結局の所、「何が知りたい」のかがうまく伝わってこない印象です。
(具体的に困っていることがあるなら、それを明示してもらえると助かります)
何を分からないかをどう伝えるかがわからないというべきか・・・(?)
ちょっと考えます・・・
> 何バイト境界に~になる.
> ここですね。
一般はどこを指すかに対する返答でしょうか。
一般に2の冪乗になることは疑問の余地はありませんね?
あなたが疑問視しているのはnバイト整数のアラインメントがnバイトになるべきか否かですよね?
どうも文章をきちんと読んでいるか疑問です。
> そういえばキチンとしたソースというのはない。
> 逆に僕はキチンとしたソース(日本語)を見つけられていません。
何語でも構いませんが、質問の前提となっている物事がソース無しとなると、まずは前提を疑うのが先ではないかなあという気がしますね。
1,2バイト整数を4バイトアラインで速くなる要因が私には思いつきません。
今回のx86において4バイトアライメントが一番効率が良いといったことを撤回します。
アライメント関連の記事には4バイト境界にアラインさせるというのがよく書かれていますが
私がそれを勝手にメモリアクセスの効率がよいものなんだと思い込んだだけのようです。
ごめんなさい。
蛇足かもしれませんが、x86系はPentiumあたりからデータバス幅が64bitだったりするので、現在はアライメントは8バイトが効率よいです。
また、このあたりの話は、メインメモリとCPUキャッシュの速度差も考慮しないと腑に落ちないかもしれません。(メインメモリは遅いので、アクセス回数が最小になるようにアライメントをそろえる)
以下を参照してみてください。(GIGAZINEの記事)
https://gigazine.net/news/20180911-access-speed-history/