• ベストアンサー

C#、VB.NET、C++.NETでのメモリ確保の質問

投稿カテゴリに.NETの言語のカテゴリが無いのが 残念ですが、.NET言語に関する質問をさせてください。 C#でWin32アプリとやり取りするアプリケーションを 作っていて、プログラム内でメモリ確保をする必要があります。 Marshal.AllocCoTaskMem()とMarshal.AllocHGlobalが() ありますが、これらは動作にどのような違いがあるのでしょうか。 ヘルプなどを読みましたが、よく分かりませんでした。。

質問者が選んだベストアンサー

  • ベストアンサー
  • toshi7607
  • ベストアンサー率12% (60/482)
回答No.2

あ、言い方を変えると Marshal.AllocCoTaskMem() タスク終了時に開放されるメモリ領域 Marshal.AllocHGlobalが() タスク終了しても開放されないメモリ領域 の違いでは? 通常はMarshal.AllocCoTaskMemを使えば良いんだろうと思います。 まったく知らないので全部想像ですが^^;

nihon_no_samurai
質問者

お礼

教えていただき、なるほど~って思いました。 たぶんそれだと思います。ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • toshi7607
  • ベストアンサー率12% (60/482)
回答No.1

C#やWin32はまったく知りません。 が、 関数の名前から想像するに TaskMemはその動いているタスク内で有効なメモリ領域 Globalは複数タスクで同時にアクセス可能なメモリ領域 であろうと想像できます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C++ メモリの動的確保について

    C++のメモリの動的確保について、以下のことが分からないので、教えて頂けないでしょうか? 適切にメモリ確保が行えていたとしても,あることに注意しないと実行時にプログラムが不正に停止することがある.「あること」について,また「あること」が起こるプログラムの例を示せ. いろいろ探したり試したりしたのですが、うまく説明できる内容が思い浮かびませんでした。 どうかよろしくお願い致します。

  • 動的確保について

    こんばんは。プログラミングについてお聞きしたい事があり 投稿させて頂きました。初心者なので見当違いでしたら申し訳 ありません。 現在、C言語でプログラムを作成しているのですが、メモリの 動的確保をする際、確保する領域の先頭アドレスを指定するという ことは出来ないのでしょうか。 現在はmallocを使用して領域を確保していますが、実験の都合上、 どうしても自分で確保すべき領域を指定したくなりました。 調べても分からないのでもしノウハウをお持ちの方がいましたら 教えて頂けますでしょうか。 宜しくお願い致します。

  • c言語のメモリの確保について

    c言語で変数を宣言したり、領域を確保したりする場合に、メモリ上のこのアドレスに領域を確保する、といったように場所を指定することはできるのでしょうか?

  • メモリの確保について教えてください。

    いつも拝見させて頂き、かなり勉強させていただいております。 今日は思い切って質問させていただきます! まだ独学でC言語の勉強を始めたばかりなので、分かっていないことも多く、不明瞭な書き方になってしまったら、申し訳ありません。 ファイルやデータベースから情報を読み込み、それを別のデータベースへインサートするプログラムを作っています。 fgetsやfetchでデータを取得するのですが、これまではループ(while(1))を使って 1行分のデータを取得し、簡単な処理(printfやカウントを取る等)をして、別データベースへインサートする。 という処理を、全てループ内で行ってきました。 しかし、今回は構造体を用意し、データの件数分の構造体領域をmallocで確保して簡単な処理を行い、別データベースへインサートするという課題があります。 mallocでは必用な分だけメモリを確保できるため、無駄がないと知りましたが、前に書いたようにループ内で取得からインサートまでを行う処理でも無駄は出ないように思います。 だとしたら、ループ内で全ての処理を行うのと、メモリを確保するのとでは何か違いや利点があるのでしょうか? もしくは、方法の違いだけで、どちらを使うかは違いがないのでしょうか? とても基本的な質問でしたら、申し訳ないのですが アドバイスを頂きたいと思います。どうぞよろしくお願いいたします。

  • 動的メモリ確保の外部関数

    画像処理関係のプログラムを作成しているのですが(C言語で)、動的にメモリ確保をすることが頻繁にあります。 そこで、どんな型(int,char,double,etc..)の場合でもメモリ確保できるような、1つの外部関数を作成したいと考えています。 例えば、 int Memory(引数) { 型宣言; int型の動的メモリ確保; char型の動的メモリ確保; double型の動的メモリ確保; return 0; } イメージでは、上のような感じです。 もしかして、このような考えは、不可能でしょうか? どなたか良いアドバイスがあれば、ご教授ください。 よろしくお願いします。

  • メモリを解放しないとどうなる?

    趣味でプログラムの勉強をしています。 初歩的な質問になると思いますが、よろしくお願いします。 C言語やC++言語のように、動的に確保したメモリを使用後に意識して解放しないといけない言語で、解放の処理をしないままプログラム(アプリケーション)を終了した場合にはシステム(OS?)的にはどのような状態になるのでしょうか? 例: ・malloc して free しない ・new して delete しない 確保されたメモリ領域がそのまま残り、システムとして使用できるメモリ量が減る(解放にはPCの再起動が必要)のでしょうか? それともアプリケーションの終了時に自動的に解放されるのでしょうか? Windowsの場合を想定してご回答いただだけると嬉しいです。

  • アセンブラでのメモリの動的確保について

    自作コンパイラのために最近NASMを使ってアセンブラの勉強を始めたものです。 メモリ領域の確保のためにNASMでは buffer: resb 64 と宣言しますが、C++でのchar* buffer=new char[size]; のような、動的なメモリ領域の確保の記述は可能でしょうか? 普段はC++を主に使っているため、見当違いな質問かもしれませんが、よろしくお願いします。

  • 配列の操作やメモリの確保のミスについて

    プログラミング初心者です。 Visal Studio 2010を使用してC++の勉強をしています。 配列の操作やメモリの確保でエラーを起こした場合、OSや他のプログラムにもエラーを引き起こすことがあるのでしょうか? (記述・実行しているプログラムは教材に記されているただのコンソールアプリです。複雑であったり大規模なものではありません。) たとえば、mallocで配列のメモリを確保したが、その配列の要素数以上に値を書き込んだり参照したり、freeをし忘れたりした場合です。 その時、想定していないメモリ領域に値が書き込まれることで、他のプログラムが壊れたりするんじゃないかと心配です。 というのも、配列の操作やmallocを失敗したときに、パソコンの動作が不安定になるのです。(画面がちらついたり、表示がおかしくなる。) explorer.exeを再起動するだけで収まるように見えるのですが、何が起きているのか不思議です。 以上になります。長文お読みいただきありがとうございました。 よろしくお願いいたします。

  • VBとVB.Netについて

     早速質問します、よろしくお願いします。  これからソフトの勉強をしようと思いますが、Visual Basic Application (VBA)、Visual Basic(Ver6.0)、Visual Basic.Netとのそ れぞれの違いを教えてください。  またこれから勉強するにはどのソフトを勉強すれば良いですか。  Visual Basic.Netをマスターすれば、VBA、Visual Basic(Ver6.0)も使えるようになりますか。  また、C言語とC++との違いも教えてください。友人に聞くとC言語はもう古くて最近は殆ど使う人がいないとも聞きましたが、本当でしょうか。  勉強しやすい言語はどれですか。windowsはどの言語できてるのですか。  以上、よろしくお願いします。

  • mallocで確保したメモリをfree解放する必要

    当方、C言語を勉強中です。 mallocで確保しておいたメモリをfreeで必ず解放するようにと教わりました。 freeで開放しないことをひどく野蛮な言葉で例えられたのですが、それほどまでに必要である実感が実はあまりありません。 ファイルポインタでファイルを開いているときに、プログラムが終了すると開いているファイルを自動的に閉じるように、プログラムが終了すると自動的に解放されるものと思っていたのですが、やはりこちらはプログラム終了後も確保されたままになってしまうのでしょうか。 また、解放しないことによるデメリットで、メモリを圧迫する以外にはなにがあるのでしょうか。 ご教授おねがいします。