問題タブ [memory-alignment]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
16036 参照

visual-c++ - クロスプラットフォームのALIGN(x)マクロ?

struct一定のアラインメントを持ったものを作りたいです。

GCCコンパイラとVisualC++コンパイラの両方に同じ構造体定義を使用したいと思います。

VisualC ++では、通常、これを行います。

GCCでは、通常、これを行います。

もちろん、これを機能させるための適切なマクロを作成することもできます。

したがって、両方のケースを透過的に処理できますが、ここでは、整列定数(32)を複製する必要があります。これは避けたいと思います。

GCCの代替手段は、ドキュメント__attribute__に記載されているように、次のようにstructタグの後に置くことです。

したがって、このタイプの構文を機能させることができます。

誰かより良いバージョンがありますか?他のアイデア?少しコード検索を試みましたが、あまり有望なものは見つかりませんでした。


更新: @Johnのコメントに基づいて、動作する可能性のある別のバージョンがあります(私はそれをコンパイルしていませんが、ドキュメントはそれがOKのアイデアであることを示しています)

0 投票する
3 に答える
9645 参照

c - GCCパッドがNOPで機能するのはなぜですか?

私はしばらくの間Cと協力してきましたが、ごく最近、ASMを使い始めました。プログラムをコンパイルするとき:

objdump逆アセンブリにはコードがありますが、retの後にnopsします。

私が学んだことから、nopsは何もしません、そしてretの後は実行さえされないでしょう。

私の質問は:なぜわざわざ?ELF(linux-x86)は、任意のサイズの.textセクション(+ main)で動作しませんでしたか?

ただ学ぼうとして、助けていただければ幸いです。

0 投票する
3 に答える
996 参照

c++ - ポータブルC++アライメント?

Pimplイディオムをローカルストレージイディオムに適用したい:


mytype.h


mytype.cpp


このアプローチで私が抱えている唯一の懸念は、の調整ですm_storagecharintと同じように整列されるとは限りません。アトミックには、さらに制限の厳しい配置要件があります。アライメント値を定義(およびアサート)する機能を提供するストレージを宣言するためのchar配列よりも優れたものを探しています。何か知っていますか?多分ブーストライブラリはすでにこれを行っていますか?

0 投票する
2 に答える
2036 参照

objective-c - Objective-C ランタイム: class_addIvar のサイズと配置には何を入れるべきですか?

Objective-C ランタイムは、class_addIvar C 関数を提供します。

私は何を置きsizeますalignmentか?

type のインスタンス変数を追加していますが、スコープ内にオブジェクトUITextPosition *がありません。UITextPositionのサブクラスはsizeどこsizeof(self)ですか? つまり、オブジェクトがオブジェクトと同じサイズであると仮定できますか?selfUITextFieldUITextPositionUITextField

どうすれば入手できalignmentますか?

0 投票する
1 に答える
791 参照

c++ - SSE 命令の g++ 4.2 インライン アセンブリは、アラインされた XMM レジスタ コピーを使用してユーザー アセンブリ コードをラップします。

インライン アセンブリを使用する関数があります。

次のアセンブリ コードにコンパイルされます。

コードはそれほど効率的ではありませんが、それは私の関心事ではありません。ご覧のとおり、インライン アセンブラは、%eax のアドレスから xmm0 にコピーする movdqa 命令を挿入します。問題は、ポインター vec8w* m が128 バイトにアラインされていないため、movdqa の実行時にセグ フォールトが発生することです。私の質問は、インライン アセンブラに movdqa の代わりに movdqu を使用するように指示する方法があるかどうかです (デフォルトで使用されます)。g++ の SSE 組み込み関数を使用して回避策を探してみましたが、どういうわけか xmmintrin.h ファイル (宣言する必要がある場所) に movdqu が見つかりません。残念ながら、整列された引数 m に対して関数が常に呼び出されるようにコードを変更することはできません。

0 投票する
1 に答える
143 参照

assembly - ユニオンのアドレス調整

ユニオンのメモリアドレスの割り当てについて少し混乱しています。

コードを書く際にいくつかのアライメントルールを使用します。例:

「その組合がどのように調整されるか」これらの条件のために; もしも

プラットフォームLinuxアセンブリx8664ビット

注:より良い意見がある場合は、その質問を改善するときに遠慮なく

0 投票する
1 に答える
366 参照

xamarin.ios - MonoTouchと安全でない浮動小数点

誰かが私を助けることができますか?私はこの「アンマネージド」.NETコードを持っています。これはPCプラットフォームとOSXでMonoTouchデバイスシミュレーターを使用して動作します。しかし、iPad 2デバイスでコードを実行すると、例外がスローされます。私は問題を示すためにコードをできるだけ簡単にしようとしました。

私のデバイスでは、&buffer []のインデックスが0、4、つまり4バイトがfloat32として整列されている場合に機能しますが、それ以外の場合は失敗します。

知りたいのは、MonoTouchの安全でない実装のバグなのか、それとも私なのか、.NETや安全でないコードに関する情報を見逃しているのかどうかです。

私は回避策を作成しました。ハンドルが浮動小数点のときに4バイトのバッファーで読み取り/書き込みを行い、データを配列の正しい場所にコピーしましたが、について何かを理解できなかった場合は、それでも知っておくと便利です。 NET/iPadデバイスの浮動小数点処理またはそれはバグです。int64タイプでは問題ありません。

PLCデバイスへのtcp通信のため、安全でない配列処理を使用しています。uint8/ uint16の配列を使用し、データのブロックを転送してデータのスループットを向上させています。

誰かが時間があるなら、これはそれを再現しようとするテストのための関数です:

どうもありがとう、

よろしく、Casper Wollesen

0 投票する
1 に答える
2964 参照

c++ - #pragma pack、テンプレートの typedef、構造体の配置

持っている場合は、Visual Studio または gcc を使用する

じゃあ後で:

thisInstance の構造アライメントは? つまり、typedef されたテンプレート クラスの場合、pragma pack は typedef の場所または変数定義の場所で有効になりますか? 後者の場合、ファイル間で一貫したアラインメントを持つ型を取得するための良い回避策は何ですか?

0 投票する
2 に答える
6986 参照

c++ - 8のMSVCデフォルトメモリアライメント

MSDNによると、/Zpコマンドのデフォルトは8です。これは、64ビットのアライメント境界が使用されることを意味します。私は常に、32ビットアプリケーションの場合、MSVCコンパイラは32ビット境界を使用すると想定していました。例えば:

コンパイラは次のようにパディングします。

つまり、/Zp8はデフォルトで使用されているので、上記の同じ例を使用すると、パディングが7+4バイトになることを意味します。

これは少しばかげていますね。私は誤解していますか?なぜこんなに大きなパディングが使われているのか、スペースの無駄のようです。32ビットシステムのほとんどのタイプは64ビットを使用することすらないため、変数の大部分にはパディングがあります(おそらく80%以上)。

0 投票する
3 に答える
248 参照

c - アラインされたメモリアクセスを必要とするアーキテクチャを検出する標準マクロはありますか?

次のようなものを想定します。

次のように書くことで、アラインされていないアクセス マシン (x86 など) で高速化できます。

ただし、いくつかのアーキテクチャで構築する必要があるため、次のようなことをしたいと思います。

しかし、アラインメントを指定するコンパイラ定義のマクロ (上記の私の仮説のようなもの__ALIGNED4__) や、ターゲット アーキテクチャのアラインメントを決定するためにプリプロセッサを使用する巧妙な方法に関する良い情報を見つけることができません。をテストすることもできますが、アライメントされたメモリアクセスを必要とする他のアーキテクチャでJust Work TMdefined (__SVR4) && defined (__sun)を実行できるものを好むでしょう。