タグ

Go言語とOSに関するy_yukiのブックマーク (2)

  • Go言語のメモリ管理

    ソフトウェアにとってメモリは不可欠です。 実行する命令も、メモリにロードしなければ実行できません。 ソースコードに書かれた定数値も、いったんメモリにロードしないと使えません。 関数を呼び出すにも、スタックと呼ばれるメモリ領域が必要です。 スタック以外に、ヒープと呼ばれるメモリ領域が必要なこともあります。 今回は、Go言語のプログラマーが作成するプログラムの下で、どのようにメモリが管理され利用されるかを探ります。 Go言語のメモリ管理というとガベージコレクターの話を思い起こすかもしれませんが、ガベージコレクターについては連載では取り上げません。 メモリ確保の旅 コンピューターに接続されている物理的なメモリチップが、どのような過程を経てプログラムで使われるのか、順番に見ていきましょう。 (1): カーネル 最近のオペレーティングシステムでは複数のプロセスを同時に実行できます。 それらのプロセ

    Go言語のメモリ管理
  • ファイルシステムと、その上のGo言語の関数たち(2)

    Base()とDir()はSplit()を目的別に特化させたものです。 複数のパスからなる文字列を分解する filepath.SplitList()という名前の関数もあります。名前だけ見るとパスの分割に使えそうですが、これは別の用途の関数で、 環境変数の値などにある「複数のパスを1つのテキストにまとめたもの」を分解するのに使います。 たとえば、次のコードは、Unix系OSにあるwhichコマンドをGoで実装してみたものです。 PATH環境変数のパス一覧を取得してきて、それをfilepath.SplitList()で個々のパスに分割します。 その後、各パスの下に最初の引数で指定された実行ファイルがあるかどうかをチェックしています。 package main import ( "fmt" "os" "path/filepath" ) func main() { if len(os.Args)

    ファイルシステムと、その上のGo言語の関数たち(2)
  • 1