問題タブ [stdint]
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 - C型宣言intN_t
ヘッダーstdint.hは、すべてのマシンでu32を32ビットとしてどのように定義しますか?誰かがこれを実現するためにstdint.hが行うプロセスについて詳しく説明できますか?自分のマシン(Windows 7)のstdint.hファイルはどこにありますか?
c++ - 最新のC++のuintptr_tタイプのヘッダーファイルは何ですか?
私はC99であなたがすべき#include <stdint.h>
であり、それは私のC ++ 03 gccコンパイラでも動作するように見えることを発見しましたが、それは現代のC ++の正しいヘッダーですか、それは移植可能ですか?
c++ - Microsoft Visual Studio が見つからない理由?
wikiから以下のテキストを参照してください。
C99 標準には、プログラムの移植性を高めるために、いくつかの新しい整数型の定義が含まれています [2]。実際のサイズは実装定義であり、システムによって異なる可能性があるため、既に利用可能な基本的な整数型は不十分であると見なされていました。新しいタイプは、ハードウェアが通常いくつかのタイプのみをサポートし、そのサポートがシステムごとに異なる組み込み環境で特に役立ちます。新しい型はすべて inttypes.h ヘッダー (C++ の cinttypes ヘッダー) で定義され、stdint.h ヘッダー (C++ の cstdint ヘッダー) でも使用できます。タイプは、次のカテゴリに分類できます。
私のビジュアルスタジオは、次のファイルを見つけることができません:
<cstdint>
<cinttypes>
<stdint.h>
<inttypes.h>
なんで?
c++ - vs
stdint.h
との違いは何cstdint
ですか?
どちらもMSVC(Visual Studio 2010)とgcc-4.5.1で利用できます。また、両方ともintX_t
/uintX_t
タイプを定義します(ここX
で、はタイプのバイト単位のサイズです)。
- 両方のヘッダーの論理的根拠が同じである場合(ポータブルタイプ)、どちらかを決定するためにどのような決定を行う必要がありますか?
はstdint.h
名前空間なしで各タイプを定義し、cstdint
タイプはstd
名前空間にあります。
std
定義された型を名前空間に含める、または含めない理由はありますか?2つのヘッダーの違いは何ですか?
cstdint
ファイル拡張子がなく、c
プレフィックスをstdint.h
使用し、.h
拡張子を使用します。
- このヘッダーの命名規則は何ですか?
c
プレフィックスは、これがCライブラリであることを示していますか?にファイル拡張子がないのには理由がありますcstdint
か?
c - MISRA C 2004 および c99
MISRA C 2004 の規則 1.1 は、仕様が c90 をカバーし、c99 をカバーしないことを指定します。
自分でコーディングする代わりに、stdint および stdbool ライブラリを使用したいと考えています。MISRA 実装でこの例外を作成した人はいますか?
c++ - gnuのWindows stdint.hのu_int16_tに相当しますか?
u_int16_t
これまでのところ、それは stdint.h という MSVS ヘッダー ファイル内のどこかにある Windows タイプであると想定しています。私はコンパイラにGNU g ++を使用しています(実際にはmingwのコードブロック)、typedef unsigned short uint_least16_t;
(mingwのstdint.h内)が同等かどうか、またはこのタイプを含めるために何ができるか疑問に思いましたか?
この質問は、実際には MSVS 用のGoogle sparsehashプロジェクト ファイルのコンパイルに関するものですが、コードブロックを使用しています。これが私に与えたエラーでした(ところで、エラーは何度も繰り返されました)。
c:\program files\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\sparsehash\sparsetable|40|error: 'u_int16_t' does not name a type|
50 エラーまでの完全なログを次に示します。
c - 1回のメモリ操作で可能な最大の整数をロードする方法は?
エキゾチックな組み込み環境やマイクロコントローラー環境など、さまざまなプラットフォームで実行される小さなバイトコード VM を構築しています。
VM の各オペコードは可変長 (4 バイト以下、1 バイト以下) にすることができます。オペコードを解釈する際に、現在のオペコードの小さな「キャッシュ」を作成したいと考えています。ただし、多くの異なるプラットフォームで使用されているため、それを行うのは困難です。
したがって、期待される動作の例をいくつか示します。
- 8 ビット メモリ バスを備えた 8 ビット マイクロコントローラでは、複数の (遅い) メモリ操作をロードする必要があるため、1 バイトのみをロードする必要があります。現在のオペコードを実行する
- 8086 (16 ビット) では、1 バイトだけをロードすると、基本的に有用なデータを後で読み取れるように捨てることになるため、2 バイトをロードしたいと思いますが、2 バイトを超えてロードしたくないので、複数の操作が必要です
- 32 ビット ARM プロセッサでは、4 バイトをロードする必要があります。そうしないと、再度読み取る必要があるデータをスローするか、複数の操作を実行することになります。
これでいいと思っていれば簡単に扱えると思いますunsigned int
が、8ビットのAVRマイコンではintは16ビットで定義されていますが、メモリのデータバス幅は8ビットしかないので、メモリのロード操作は2回で済みます。必要。
とにかく、現在のアイデア:
usinguint_fast16_t
はほとんどのプラットフォームで期待どおりに動作するようです (ARM では 32 ビット、8086 では 16 ビット、x86-64 では 64 ビット)。ただし、AVR やその他の 8 ビット マイクロコントローラーは明らかに除外されています。
uint_fast8_t
usingはうまくいくかもしれないと思っていましたが、ほとんどのプラットフォームでは であると定義されているように見えますがunsigned char
、これは間違いなく最適ではありません
また、解決しなければならない問題がもう 1 つあります。それは、アラインされていないメモリ アクセスです。x86 では、これはおそらく問題にならないでしょう (理論的には 2 つのメモリ操作を行いますが、おそらくハードウェアにキャッシュされます)。ただし、ARM では、アライメントされていない 32 ビット アクセスを実行すると、3 倍のコストがかかる可能性があることがわかっています。 1 つのアラインされた 32 ビット ロードに相当します。アドレスがアラインされていない場合、アラインされたオプションをロードしてできるだけ多くのデータを取得したいのですが、別のメモリ操作は絶対に避けてください。
魔法のプリプロセッサ インクルードなどを使用して何らかの方法でこれを行う方法はありますか?それとも、プラットフォーム用にコンパイルする前に最適なキャッシュ サイズを手動で定義する必要があるだけですか?
c++ - __u8 と uint8_t の違い
uint8_t
誰かがタイプとの違いを説明できます__u8
か?
uint8_t
stdint.h で定義されており、すべての UNIX システムで利用できることを知っています。
そして、私がそれらを使用する場合、私が何をしようとしているのかが認識できます.
今、私は__u8
and__u16
型に出くわしました。私には同じようです。
これらの型のいくつかは linux/types.h で定義されています
見つかりません__u8
でしたが、まだ使用でき、uint8_t のように動作します。
パフォーマンスやメモリ消費に違いはありますか?
手伝ってくれてありがとう :)