問題タブ [packed]
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.
c++ - パック フィールドへの参照を返すことができないのはなぜですか?
g++ を使用して、パックされたフィールドを含むコードをコンパイルします。ただし、パック フィールドへの参照を返そうとするとエラーが発生します。
例:
エラーが発生します:
パック フィールドへの参照を返すことができないのはなぜですか?
c - tcc のパック構造体
tcc C コンパイラでパック構造体を実行しようとしています。コードは次のとおりで、__attribute __ タグがサポートされている必要があります。
gcc では動作しますが、tcc では動作しません。__attribute __((packed)) と他のいくつかのテストも試しましたが、どれも機能しません。
java - 分散システムへの COBOL パック フィールド
レガシー システムを Java プラットフォームに変換しています。その間、レガシーから Java を実行している分散サーバーにファイルを送信しています。パックされたフィールドで問題が発生しています。COBOL (EBCDIC) COMP-3 フィールドは、BINARY に続いて ASCII に操作する必要があります。ただし、ファイルをメインフレームに戻す場合や、さらに処理するためにファイルをレガシー システムに転送する場合は、パックされたファイルへの変換が面倒で反復的になります。
この種の操作をよりシームレスに行うのに役立つプロセスまたは機能を知っている人はいますか? 私たちは皆、Velocidata を調べる準備ができており、それにも課題があります。
c - GCC Cでパックされた構造体の整列配列を取得するには?
GCC C では、配列内の各エントリが整列されている、パックされた構造体の配列を取得するにはどうすればよいですか?
(FWIW、これは MIPS4000 アーキテクチャを使用する PIC32 上にあります)。
私はこれを持っています(簡略化):
RADIO_PACKET は内部でパックされます。
次に、RADIO_PACKET のキューである RADIO_PACKET_QUEUE があります。
配列 q[] 内の各 RADIO_PACKET をアラインされたアドレス (モジュロ 4 アドレス) で開始する必要があります。
しかし、現在 GCC はそれらを整列していないため、q[n] を単語として読み取ろうとするとアドレス例外が発生します。たとえば、これは例外を与えます:
おそらくこれは、RADIO_PACKET をパックとして宣言した方法が原因です。
各 RADIO_PACKET を内部的にパックしたままにしたいが、GCC が必要に応じて各配列要素の後にパディングを追加して、各 RADIO_PACKET がアラインされたアドレスから開始するようにしたい。
これどうやってするの?
c++ - アラインメントを失うことなく、再帰的にテンプレート化された構造体を最適にパックする
テンプレート パラメーターから取得した型の 4 つのフィールドの構造体があります。
各型T1
、T2
、T3
、およびT4
は、プリミティブ型または型であることが保証されていますfour_tuple<...>::payload
。保証は再帰的です。構造体は、葉ノードがプリミティブ型である四分木をエンコードしていると考えることができます。
sizeof
私の目標は、すべての葉ノードが適切に配置されているという条件に従って、構造体が可能な限り最小になることです。最適化に使用できるツールは、以下を使用したクラス テンプレートの特殊化です。
- フィールドの並べ替え
t1
、t2
、t3
、t4
- フィラー フィールドの追加
- gcc 属性
packed
オンpayload
- 多分他の人?
enable_if
SFINAEを使用すると、この問題に対する賢い解決策があるように感じます。誰でも見つけることができますか?
問題を説明するために、上記の実装をそのまま使用するusing Foo = four_tuple<char,double,char,double>
と、ペイロードと全体のサイズが 32 になります。単純にペイロードを宣言するとpacked
、double
が適切に配置されません。フィールドを降順に並べ替えるテンプレートの特殊化 (ここではdouble, double, char, char
) は、ペイロードと全体のサイズを 24 にしますusing Bar = four_tuple<Foo::payload,int,int,int>
。最適なパッキングではBar
32 バイトに収まる可能性がありますが、このスキームでは 40 バイトが必要になります。packed
int
Bar
一般に、構造体のフィールドのメモリ レイアウトを再構築すると、キャッシュの考慮事項が原因でパフォーマンスに影響する可能性があり、一般に、これらの影響は、少なくともより良いパッキングによる潜在的な利益と同じくらい重要であることを知っています。ただし、トレードオフを検討したいのですが、この問題を解決しない限り、私のコンテキストでは適切にそれを行うことはできません。
c - パック構造をグローバル構造に代入する際の警告
(組み込み) ARM アーキテクチャで実行しています。
私は構造を持っていますBrown
:
Abo
を含むパック構造Brown
:
グローバル変数:
AboSent.Left
今、私はグローバル変数Dest
(パックされていない)に割り当てたい:
コンパイラは私にエラーを与えます:
途中でローカル変数を使用すると、警告なしで正常にコンパイルされます。
何故ですか?真ん中のローカル変数がどのように違いを生んだのですか?
この警告は、アラインされていないポインターを渡すときに発生することを知っていますが、ここではポインターではありません。
c - 埋め込み PACKED_STRUCT 定義を取得して g++ でコンパイルする
私はスマート メーター プロジェクト、ARM、keil コンパイラに取り組んでいます。より複雑なロジックを g++ でコンパイルして、回帰テストを実行したいと考えています。購入した WMBus スタックへのインターフェイスを定義するいくつかのインクルード ファイルに問題があります。
PACKED_STRUCT は、コンパイラに依存するインクルード ファイルで定義されます。
...
そして、私は常に次のエラーメッセージを受け取ります:
エラー: タイプはパラメータタイプで定義されていない可能性があります
エラー: パラメータ宣言の typedef 宣言が無効です
インクルード ファイルを編集して PACKED_STRUCT を削除する以外に、これを回避する方法はありません。明らかに、ファイルを直接編集するのではなく、ファイルをコピーして編集し、-I ディレクティブを使用して、変更したファイルを G++ で見つけられるようにします。
エラーメッセージは、マクロの引数として型を宣言できないと言っているようですか?
再宣言しても注意してください:
-std=c++11 フラグを g++ に使用していますが、このフラグを削除しても何も解決しませんが、システムのインクルードが失敗します
修正されていないコードを g++ でコンパイルするために PACKED_STRUCT を定義する方法はありますか?
oracle - Oracleで現在の日付のパック数値スタイルを作成する方法
次のルールを使用して、日、月、年を区切り記号なしの 3 つの INTEGER 値として指定します。
日と月のコンポーネントは 2 桁である必要があります。日または月が 10 未満の場合は、前にゼロを付ける必要があります。
どの年でも、年コンポーネントは 4 桁にすることができます (たとえば、1997 年)。1950 年から 2049 年までの範囲の年の場合、年コンポーネントは 2 桁にすることもできます (50 は 1950 年を表します)。
日付コンポーネント間に区切り文字を使用することはできません。
例: 「240497」または「04241997」