カテゴリ

2009年新春特集

ニュース

Feed

ニュース

教養としてのC言語:ITpro

C言語はプログラマがたしなむべき教養になったのではないか

(2008/10/03 16:47)

Comments_count コメントする (6) Clips_count クリップする (0) Access_count アクセス数 (1183)

315589
本文から抜粋

筆者は「日経ソフトウエア」というプログラミング雑誌で記事の執筆と編集をしている。先日,C言語にターゲットを絞った特集を企画・担当した。記事は無事校了し,今はこの特集を収録した2008年11月号が書店に並んでいる。 C言語の特集を企画した理由はただ一つ,C言語を学ぶことによって,プログラミングに関するより深い知見を得られると強く感じたからだ。筆者自身,C言語に不案内で苦手意識を感じていたので,その思いは余計に大きかった。同時に,だからこそ,筆者同様にC言語の経験が比較的少ない人,そしてこれからC言語を...

  • Thumbnail
    by durian ( アクセス数:1821, 投稿数:15, マイクリップ数:19 ) |投稿時間:2008/10/03 18:47
    ポインタ、やりましたねー
    ポインタのポインタとか。ポインタを使ってリスト構造を使ったりしましたね。
    メモリをfreeする順番を間違えると、二度とアクセスできないメモリ空間ができてしまったりして・・・・
    
    親関数から、子関数を呼んだときに、そちらでmallocして関数の実行が終わって、処理が親関数にもどってきたら子関数で確保されたメモリって自動でfreeされるんでしたっけ!??
    
    このコメントの獲得ポイント0点(0人の評価)
  • Thumbnail
    by takanowo ( アクセス数:1085, 投稿数:19, マイクリップ数:7 ) |投稿時間:2008/10/04 00:18
    親関数から、子関数を呼んだときに、(省略)
    freeされないと記憶していますが、あまり自信ないです・・・。 子関数から戻る直前に子関数の中でfreeするのが礼儀(?)だったような・・・。 ・・・ さすがに長年触ってないと忘れてしまいますね・・・。
    このコメントの獲得ポイント1点(1人の評価)
  • No_photo_thumbnail
    by sendredirect ( アクセス数:68, 投稿数:0, マイクリップ数:0 ) |投稿時間:2008/10/06 01:39
    全く記憶していなくて、全く自信がないですが、自動でfreeされないでしょう。
    
    関数抜けるとfreeされる仕様だと仮定すると、大きなメモリを必要とする処理は、すべて同じ一つの関数内に集めることになります。イメージ的にはでっかいmain関数とか、もしくはmallocばっかり並んでるmain関数とかって感じですね。
    
    そして処理の過程で、子くらいならまだしも、孫関数で動的にメモリ確保が必要になり、それが継続して確保し続ける必要がある場合は、「いったん戻って確保して確保して、また孫の階層で処理する」「孫で必要になるかもしれないからとりあえず確保しておいてから関数を使い、必要なかったら戻ったところでfreeする」なんか変です。
    
    これが、はじめの仮定(仕様)を変えることで楽になれるなら、言語仕様の方を変えたいですよね。
    そして、そんなコードを書いた記憶はありませんよね?
    
    このコメントの獲得ポイント0点(0人の評価)
  • Thumbnail
    by durian ( アクセス数:1821, 投稿数:15, マイクリップ数:19 ) |投稿時間:2008/10/06 09:45
    takanowaさん、sendredirectさん、ありがとうございます。やはりされないですよね。
    確かに、子や孫では、その関数の処理が終了しても持ち続けないといけないようなメモリを確保するのは、おかしいですね。子のほうで終了前にきちんとfreeしとくということですね。
    
    このコメントの獲得ポイント0点(0人の評価)
  • Thumbnail
    by fujiyoshisyouta ( アクセス数:3551, 投稿数:330, マイクリップ数:92 ) |投稿時間:2008/10/06 10:11
    親関数から、子関数を呼んだときに、そちらでmallocして関数の実行が終わって、処理が親関数にもどってきたら子関数で確保されたメモリって自動でfreeされるんでしたっけ!??
     一般的には解放されないでしょう(Cが使える環境すべてを知っているわけではありませんので、一般論です)。言語仕様がそうなっていたかと記憶します。  ちなみに、Visual C++標準のライブラリですと、malloc()した領域は、プロセスが「正常に」終了した時点で自動的に解放されます。  (上記ライブラリのmalloc()関数が内部的に使用している、HeapAlloc()というWindows APIの仕様による)  他の処理系については、ちょっとわかりませんase02
    このコメントの獲得ポイント0点(0人の評価)
  • Thumbnail
    by durian ( アクセス数:1821, 投稿数:15, マイクリップ数:19 ) |投稿時間:2008/10/06 23:16
    fujiyoshisyoutaさん、ありがとうございました!
    
    でも皆さん既にC言語現役ではないのですねase01
    
    このコメントの獲得ポイント0点(0人の評価)

カタログ

Eclipse
Microsoft Visual Studio
NetBeans
Xcode
C++Builder
PellesC
GNAT Programming Studio
jGRASP
KDevelop
MonoDevelop
GHS MULTI
Qt Creator
Rational
Sun Studio
Turbo C++
wxDev-C++
Geany
Dev-C++
Codelite
Code::Blocks
Anjuta
okyuu.comとは

価格.comID(メールアドレス)

パスワード

次回から入力を省略
Okyuu_on_facebook
Okyuu_on_twitter
Okyuu_vox_com

新着記事

ニュース