問題タブ [allocation]

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 投票する
7 に答える
8001 参照

c++ - マネージ ラッパーでアンマネージ C++ をラップする

アンマネージ C++ ライブラリがあります。.NET アプリケーションの機能を公開したいと考えています。処理方法がわからない特定の関数が1つあります。

typedef void (free_fn*) (void*); void put (void *data, free_fn deallocation_function);

アイデアは、動的に割り当てられたバッファーを関数に渡し、割り当て解除関数を提供することです。ライブラリはデータを非同期的に処理し、後でデータが不要になったときにバッファを解放します。

ボイド *p = malloc (100); ... バッファを埋める... put (p, free);

この種のものを .NET アプリケーションに公開するにはどうすればよいですか?

0 投票する
4 に答える
7123 参照

c++ - この C++ STL アロケータが割り当てないのはなぜですか?

から派生したカスタム STL アロケータを作成しようとしていますstd::allocatorが、どういうわけかすべての呼び出しがallocate()基本クラスに移動します。このコードに絞り込みました:

「よう!」と期待しています。実際には何も割り当てていないため、印刷された後、恐ろしいエラーが発生しました。代わりに、プログラムは正常に実行され、何も出力されません。私は何を間違っていますか?

gcc と VS2008 で同じ結果が得られます。

0 投票する
8 に答える
17190 参照

c - 大きな配列を宣言するときにスタック オーバーフロー例外を取得する

次のコードは、スタック オーバーフロー エラーを生成しています

どうすればこれを回避できますか? Turbo C++ を使用していますが、コードは C のままにしたいと考えています。

編集:

アドバイスをありがとう。上記のコードは単なる例であり、実際にはサブメインではなく関数で配列を宣言しています。また、配列をゼロに初期化する必要があったため、malloc で検索したところ、calloc が私の目的に最適であることがわかりました。

Malloc/calloc には、変数を使用してサイズを宣言できるというスタックへの割り当てよりも利点もあります。

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

objective-c - 動的型付きオブジェクトを割り当てる方法

Objective-C での動的型付けについての話をたくさん見てきました。しかし、私はそれが本来あるべきだと思う例を見たことがありません。

2 つのオブジェクト (1 つが割り当てられ、もう 1 つが解放される) をジャグリングすることになっている汎用関数があり、呼び出し元のオブジェクトが新しく割り当てられたオブジェクトにそれ自体をアタッチするとします。どちらもclass0から継承

これが何かを説明すると思うなら、これを自由に解釈してください!!

クラスが実行時に選択された場合、引数リストを処理するにはどうすればよいですか (? は今のところプレースホルダーです) 実行時までクラスが定義されていないオブジェクトを割り当てるにはどうすればよいですか?

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

c# - C# データ割り当ての問題

次の問題があります。関数を含むC++ dllがあります

次に、クラスを持つC#dllがあります

//関数 Free () は次のようになります。

私はC#アプリケーションからそれを呼び出します

問題は、しばらくすると C# アプリケーションが SystemAccessViolationExcetpion でクラッシュすることです。どこに問題があるのか​​ わかりますか?

より明確にするために:C#アプリケーションは、一部のタイプの入力では終了し、他のタイプではクラッシュする可能性があるため、呼び出し規約に問題があるとは思いませんか?

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

c++ - std::allocator コンストラクト/破棄と配置 new/p->~T()

私のプロジェクトでは、いくつかの STL コンテナーをゼロから作成しています (理由があります)。私はSTLの機能とインターフェースを非常に厳密に模倣しているので、「標準構造と同じ名前であれば、可能な限り標準に準拠する」というポリシーを守るために最善を尽くしています。

もちろん、私のコンテナはテンプレート パラメータとしてアロケータを使用します。これは、いくつかのカスタム割り当てスキームを可能にするので非常に便利です。私の質問に進みます。

このstd::allocatorインターフェイスは、メモリの割り当てをオブジェクトの構築から分離します。同様に、解放と破壊を分離します。どこからメモリを取得するかは、c++ でオブジェクトを適切に構築することと多かれ少なかれ無関係であるため、これは理にかなっています。

したがって、デフォルトの実装では次のような 2 つの構築/割り当て解除関数があります (本から直接引用)。

ご覧のとおり、construct は単にplacement new を呼び出し、destroy は単にデストラクタを呼び出します。

配置の新しい構文とデストラクタ構文を使用するだけでなく、これらを使用する理由はありますか? 「正しい」アロケーターはこれらを別の方法で実装できますか? または、標準に準拠するすべてのアロケータ実装に、この方法で実装されたメソッドの構築/破棄があることが保証されていますか?

もっと言えば、コンテナーの要素を構築するためにいつでもstd::uninitialized_copyandを使用できると言っても過言ではありませんか?std::uninitialized_fill

ありがとう。

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

sql - 巨大なテーブルの MSSQL カーソルが領域を割り当てられない

同じ巨大なテーブル (1 億 5000 万を超えるレコード)の 2 つの「インスタンス」間の結合から生成されたレコードを実行するようにカーソルを設定しようとしています。

次の例外メッセージが表示されます。

'PRIMARY' ファイル グループがいっぱいであるため、データベース 'tempdb' のオブジェクト 'dbo.SORT 一時実行ストレージ: 165282123350016' にスペースを割り当てることができませんでした。不要なファイルを削除するか、ファイル グループ内のオブジェクトを削除するか、ファイル グループにファイルを追加するか、ファイル グループ内の既存のファイルに対して自動拡張を設定して、ディスク領域を作成します。

この理由を知っている方はいらっしゃいますか?または、以下のクエリをより効率的にするにはどうすればよいですか?

DECLARE CURSORと最初の の間のどこかで発生することがわかりましたが、それが間にあるFETCH NEXTかどうかはまだわかりません...

  • DECLARE CURSOROPEN

または間

  • OPENそして最初のFETCH NEXT

詳細: SQL ステートメントは次のようになります。

最後に取得したログ メッセージは「A」で、1 時間後に上記のメッセージで失敗し、「C」に到達しません。現在、ポイント「B」でログを記録しようとしています。


リクエストに応じて、正確な sql 式を投稿します。


Quassnoi からの更新された回答の後、元のインデックスもテーブルに投稿します。

このテーブルには、列iBatchNumber、、、、sFieldNameの非クラスター化インデックスがあります。そして、そのインデックスには含まれる列があります。sTableNameiRowIndexsFieldValue


Quassnoi が提案したように (そして、今ではその理由を理解していると思います)、インデックスを変更して、列が 、 、 、 の順序になるようiBatchNumbersTableNameiRowIndexましsFieldNameた。そして、私sFieldValueは含まれている列として使用します。実行計画にはもう何も含まれておらずSORT、実行計画のステップ数は元の半分以下です。これも高速であることを願っています...

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

c++ - Windows でメモリ割り当てを測定するための優れたツールは何ですか?

時間が経つにつれて(アクティブに実行されている間)、ますます多くのメモリを使い続けるアプリケーションがありますが、リークはありません。したがって、プログラムが完全に間違ったことを行っているわけではないことはわかっています。これは簡単に見つけることができます。

代わりに、問題の追跡を開始できるように割り当てを追跡したいと思います。Mac では、どのオブジェクトが誰によって割り当てられたかの詳細なプロファイルを提供する Instruments を使用しますが、Windows では何を使用しますか?

現在、VS2005 を使用して、Windows XP で C/C++ を使用しています。したがって、このセットアップ用のツールはどれも素晴らしいものであり、必要に応じて購入 (企業のもの) を完了するのに時間がかかり、締め切りがあるため、無料のツールまたは少なくとも数週間の試用版を提供するツールがあればよいのですが。

ありがとう!

編集:私はVLDを使用しているので、プログラムにリークがないことはわかっていますが、必要以上のメモリを占有していて、返されていないようです。したがって、リークではなく割り当てを追跡する必要があります。

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

c++ - C++ 'new' 演算子の問題?

私は最近、この暴言に出くわしました。

この記事で言及されているいくつかの点がよくわかりません。

  • delete著者はvsの小さな煩わしさについて言及していますがdelete[]、ソリューションを提供することなく、(コンパイラにとって) 実際には必要であると主張しているようです。私は何か見落としてますか?
  • function の「特殊なアロケーター」セクションでf()は、割り当てを次のように置き換えることで問題を解決できるようです:(アライメントを省略)

    /li>
  • 「::operator new[] のオーバーロードの危険性」では、作成者はnew(p) obj[10]. 代わりにこれではないのはなぜですか(はるかにあいまいではありません):

    /li>
  • 「C++ でのメモリ割り当てのデバッグ」。ここで議論することはできません。

記事全体は、カスタム メモリ管理スキームに配置された重要な コンストラクタデストラクタを持つクラスを中心に展開しているようです。それは役に立つかもしれませんし、私はそれについて議論することはできませんが、共通点はかなり限られています.

基本的に、新しい配置とクラスごとのアロケータがあります。これらのアプローチで解決できない問題は何ですか?

また、私が頭が固くて頭がおかしくなった場合に備えて、あなたの理想的な C++ では、何を置き換えoperator newますか? 必要に応じて構文を発明してください - これらの問題をよりよく理解するために、理想的なものは何ですか。

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

c - free()関数を使用せずに、Cで動的に割り当てられたメモリを解放する別の方法はありますか?

私はテストのために勉強しています、そして私はこれらのどれかがfree(ptr)と同等であるかどうか疑問に思いました:

私が理解していることから、free()関数は、ptrの後のメモリが再び使用可能になったことをCに実際に通知するため、これらはいずれも機能しません。申し訳ありませんが、これはちょっとした質問ですが、助けていただければ幸いです。