問題タブ [size-t]
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++ - size_t のポイント
重複の可能性:
unsigned int と size_t
何かのサイズ (通常は で割り当てられたものnew
) を保存する必要があるときは、常に に保存しunsigned int
ます。ただし、いくつかのコードを参照すると、使用されていることがわかりましたsize_t
。これによると、ほとんど使用されていません。
size_t
C ++のポイントは何ですか?- それを使用するいくつかの関数が
unsigned int
代わりに使用しないのはなぜですか? - 新しいコードでどのように使用する必要がありますか?
c++ - size_tを整数に変換する(c ++)
私は、ネットワークパケットの長さに基づいて反復するforループを作成しようとしています。APIには、event.packet-> dataLengthによる変数(size_t)があります。0からevent.packet->dataLength-7まで反復したいのですが、反復するたびにiを10ずつ増やしていきますが、問題が発生しています。
私は解決策を探しましたが、有用なものを見つけることができませんでした。size_tをunsignedintに変換し、それを使って算術演算を実行しようとしましたが、残念ながら機能しませんでした。基本的に私が欲しいのはこれだけです:
私がこのようなことをしたり、変換を試みたりするたびに、i <#の部分は膨大な数になります。彼らは、「%u」を使用して実際の数値を出力するAPIのチュートリアルでprintfステートメントを提供しましたが、それをunsigned intに変換すると、それでも正しくありません。ここからどこへ行けばいいのかわからない。どんな助けでも大歓迎です:)
c++ - size_t を引数として渡す「効率」
現在のシステムに応じて 32 ビットまたは 64 ビットになる可能性があるためsize_t
、常に size_t を参照または const 参照として関数に渡し、常に 4 バイトになるようにするのが最善でしょうか? (8 バイトの場合は、コピーを作成する必要があります) 私が調べた多くのオープン ソース コードはこれを行いませんが、コンパイラが 64 ビット整数をサポートしている場合、それらの 64 ビット整数は常に参照として渡されます。size_t に対してこれを行わないのはなぜですか? あなたの意見はどうなのか気になります。
c++ - size_t に stddef.h または cstddef を含める必要がありますか
C++ で使用したい場合、 orsize_t
を含める必要があります<stddef.h>
か<cstddef>
? 何人かの人々がそれ<cstddef>
は悪い考えだと言っているのを聞いたことがあります。何故ですか?
c - C:intをsize_tにキャストします
32ビットと64ビットの両方のLinuxプラットフォームでC99でint
を変換/キャストする適切な方法は何ですか?size_t
例:
c++ - size_tからunsignedint(API関数から)
Oracle APIを使用してデータベースにアクセスしていますが、このAPIにはreadBuffer(char * buffer, unsigned int size);
変更を加えることができない機能があります。
このAPIを使用するクラスがあり、現在、関数のシグネチャはサイズに対してastd::string
とaを取りますunsigned int
。問題は、関数のsize引数に渡すと、からへの変換が可能std::string.size()
であるという警告をコンパイラから受け取ることです。データ損失を引き起こします。size_t
unsigned int
をAPIに渡して、コンパイラから警告を受け取らないようにするための有効な方法があるかどうか疑問に思いました。size_t
unsigned int
size_tの目的を理解しており、この変換をGoogleで検索すると、「size_t argを取るように関数を変更する」という結果が多数表示されますが、この場合、APIの署名を変更することはできません。
助言がありますか?
c++ - size_tとstd::size_tの違い
それらが宣言されている場所、それらをいつ使用すべきか、およびその他の差別化機能の違いは何size_t
ですか?std::size_t
c - 配列のサイズにintで十分なのに、なぜsize_tなのですか?
int
C標準は、可能なすべての配列サイズを格納できることを保証します。少なくとも、それは私が§6.5.2.1のサブセクション1(配列の添え字制約)を読んで理解していることです:
式の1つは「オブジェクト型へのポインタ」型であり、もう1つの式は整数型であり、結果は「型」型である必要があります。
int
配列の添え字としてsを使用するので、なぜ配列size_t
のサイズを決定するために使用することになっているのでしょうか。
なぜ十分なときにstrlen()
戻るのですか?size_t
int
c++ - 大量のメモリを割り当て、size_t を使用していますか?
私のアプリケーションでは、ビットマップ イメージのスタックから読み取った「ボリューム データ」を格納するためにメモリを割り当てています。
データを「unsigned char」に保存し、割り当て中に、最初にデータ全体に連続メモリブロックを割り当てようとしました。それが失敗した場合は、分散割り当てを試みます(画像ごとに1つの小さなメモリブロック)。
これがメモリを割り当てる私の方法です。「tryContinouseBlock = true」で呼び出します。
このコードを 32 ビットと 64 ビットの両方のプラットフォームで実行したいと考えています。
問題は、64 ビット環境 (12Gb メモリ) でも、(1896*1816*1253) サイズのデータ (bbpsize=1) をロードするとhelper_allocContinouseVolume()メソッドが失敗することです。そのため、メモリアドレスアクセスに「int」データ型を使用し、「int」の最大値は4294967295です。
32 ビット環境と 64 ビット環境の両方で、次のコードは値 "19282112" を与えます。
正しい値は「4314249408」です。
では、これにはどのデータ型を使用すればよいでしょうか? 32bit 環境と 64bit 環境で同じコードを使いたい。
c++ - C++ で size_t から uint8_t にキャスト/変換しますか?
boost::asio のソケットを使用して一方の端 (クライアント) からもう一方の端 (サーバー) にメッセージを送信するコードを作成しようとしています。
現在の私の特定の目標は、送信されるすべてのメッセージの先頭に 1 バイトの符号なし整数 (uint8_t) を追加して、残りのメッセージの長さを受信者に伝えることです。
サイズを size_t ではなく uint8_t として格納および転送する理由は、両方のマシンで正確に 1 バイトになるようにしたいためです。少しグーグルで調べたところ、マシン A とマシン B では size_t のサイズが異なる可能性があり、混乱する可能性があることがわかりました。
ここで、メッセージの長さを計算しています。メッセージは 2 つの部分だけで構成されています: uint16_t の後に変数 "data" が続きます。これは (void*) キャスト メモリのチャンクであり、さまざまな目的に使用されます (ターゲット マシンにはそのデータを解釈する方法がありますが、私はそうしません)。ここではそれに入りません)。
この例では、sizeof(data) == 4 であるため、sizeOfMessage は 6 に等しい必要があります (uint16_t は 2 バイトの整数であるため)。ただし、std::cout << sizeOfMessage の場合、表示されるのは 6 ではなく、特殊文字であるスペード (トランプのスーツのように) です。VS2010 のデバッガーでデータを見ると、6 '-'と表示されます。ただし、sizeOfMessage を size_t として定義して出力すると、すべて問題ありません (ただし、size_t のバイト単位のサイズはマシン間で保証されていないため、ネットワーク経由で送信することはできません)。
これは、演算後に size_t が uint8_t にキャストされる方法に問題があることを意味します。 sizeofは size_t を返すので、私のコードは 2 つの size_t を追加してから、それを uint8_t にキャストしています。
値が正しくキャストされていないという私の結論は正しいですか? もしそうなら、どうすればこれを解決できますか?
前もって感謝します。