• ベストアンサー

Cランタイムライブラリ

まだWINDOWSプログラミングを始めて間もない初心者です。 宜しくお願い致します。 マルチスレッドの動作確認をする際に簡単なソースを作る過程で、1つ疑問が浮かびました。 CreateThreadについてMSDNのサイトを見ると、 ”C のランタイムライブラリに記録されている関数を使うスレッドは、CreateThread 関数と ExitThread 関数ではなく、C のランタイム関数である beginthread 関数と endthread 関数を使うべきです。この方法に従わないと、ExitThread 関数を呼び出したときにわずかなメモリリークが発生します。” とあるのですが、この関数はCのランタイムライブラリに属する、この関数はCのランタイムライブラリに属さない、というのは、例えばどこかのサイトを見れば分かるものなのでしょうか? あと、”わずか”、というのがどの程度を指しているのか良く分かりませんが、”わずかなメモリリークが発生”すると、具体的には何が起こるのでしょうか? どなたか分かる方ご教授下さい。

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

  • ベストアンサー
  • jx-word
  • ベストアンサー率40% (38/94)
回答No.3

ちょっと間違ってましたね。↓を参照してください。 http://msdn.microsoft.com/ja-jp/library/634ca0c2.aspx このURL、そのまま貼っても大丈夫なのかぁ。

supertrap
質問者

お礼

有難う御座いました。 まさに欲しかった情報そのものです。 お手数をおかけしました。 >このURL、そのまま貼っても大丈夫なのかぁ。 うーん… 他の方の回答にも、参考URLとして、URLそのままを貼ってあるのを結構見かけます。 そのものずばりのご回答、どうも有難う御座いました。

その他の回答 (2)

  • jx-word
  • ベストアンサー率40% (38/94)
回答No.2

Cのランタイムライブラリ(CRT)とは、Win32APIではないC言語の標準ライブラリなどのことを指します。 詳細は http://msdn.microsoft.com/ja-jp/library/default.aspx から下記をたどってください。 MSDN ライブラリ ↓ 開発ツールと言語ドキュメント ↓ Visual Studio 2008 ↓ Visual C++ ↓ Visual C++ のリファレンス ↓ ランタイム ライブラリ ↓ C ランタイム ライブラリ なお、ヘルプのCreateThreadの項は英語版の方は更新されていて、該当の箇所は下記のようになっています。 > A thread in an executable that calls the C run-time library (CRT) > should use the _beginthreadex and _endthreadex functions for > thread management rather than CreateThread and ExitThread; > this requires the use of the multi-threaded version of the CRT. > If a thread created using CreateThread calls the CRT, the CRT > may terminate the process in low-memory conditions. というわけで、メモリリークをするわけではなく、メモリが少ない場合に異常終了するようです。 MSDNライブラリは日本語版は誤訳があったり更新されていなかったりするので、 悩んだ場合は英語版を見てみるのがお勧めです。

supertrap
質問者

補足

遅くなりました。 回答有難う御座いました。 1)ライブラリについて 遅くなって申し訳ないのですが、もしご存知でしたら、折角の機会なので教えて下さい。 教えていただいたリンク先を見ると、 libcmt.lib、msvcrt.lib、libcmtd.lib などがあるのですが、これらのファイルの中身に入っている関数名を見る方法はあるのでしょうか? 自分のイメージとしては、これらのファイルの中に、例えばstrcpy関数とかatoi関数などが入っているのかなあと想像しているのですが。 2)英語版について 自分は英語は苦手ですが、この程度なら何とか理解出来そうです。 英語版を見るとこまでは頭が回りませんでした。 貴重な情報有難う御座います。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

お使いのC/C++環境が VisualC++なのでしたら 付属のMSDNで VisualC++の リファレンス > ライブラリ リファレンス > ランタイムライブラリ などを参照してみてください VC++の場合 6.0までは ランタイムライブラリのヘッダーファイルとWindowsの標準ライブラリヘッダーファイルは includeフォルダに登録されていました VC++7.0以降はランタイムがinclude、Windows側がPlatformSDK\includeと分離されています stdio.h, stdlib.h, string.h, math.h などがランタイム側です

supertrap
質問者

お礼

遅くなりました。 回答有難う御座いました。 自分の使っている環境はVC++6.0とXPSP2です。 CD(DISC2)を見てみたのですが、今一検索がうまくかかりませんでした… 折角教えて下さったのに申し訳有りません。 ただ、stdio.h, stdlib.h, string.h, math.h と具体的にヘッダファイルを書いてくださったので、そこから追うことで、目的を達成出来ます。 有難う御座いました。

関連するQ&A