C言語を勉強し初めて1ヶ月ほどの者です。
関数に値を渡すときには、参照渡し、値渡しの2パターンが存在しますよね。
例えばint a = 3; add(a)とすると関数addに対してaのコピーが渡されるはずです。
私はてっきり同じプログラム内(例えばadd.c)内では同じメモリを(振り分けなどせず)使用しているのかと思っていましたが
このことからadd関数とmain関数メモリというのはさらに別々にメモリを振り分けられているのでは?と思いました。
自分で調べた範囲ですが、OS(というよりカーネル?)はプロセスという単位でユーザーモードのプログラムを実行しており(つまりカーネルはプロセス単位でメモリを振り分けている)さらにそのプログラム(例でいうところのadd.c)の中でのメモリ配分をプロセスが管理している...という風に解釈しました。
もしもそうならば、C言語(OS?)はプログラム(プロセス)の中で関数ごとにさらにメモリを配分しているのでしょうか?
また、このことについて調べていて疑問に思ったのが、「ユーザーモードのプログラムをプロセスという単位で実行している」ここでのプログラムというのがどこまでを指しているのかがわかりません。コンパイラが出力した「a.out」や、ターミナルのlsコマンド(これもプログラムだということは知りました)は含まれると思いますが、例えばrubyなどで書いたプログラムは、OSが提供している関数?を組み合わせているそうですが、その場合それらの関数もプログラムで、その度にプロセスが生み出されているのでしょうか?
まとまりのない文章になってしまったかもしれませんが、わかるかたがいらっしゃったら教えてください。よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。