linuxのメモ

Linux kernelの実装を解説していきます (対象ver 4.5)

メモリ割り当て - __constant_c_and_count_memset()

概要

任意の大きさのメモリを初期化する

詳細

この関数では以下の引数を受け取る

  • 初期化するメモリへのポインタ : s
  • 初期化する値へのポインタ : pattern
  • 初期化するメモリの大きさ : count

countの値が0 - 4の場合は、sのアドレスの値をpatternの値でcountバイト分上書きし、sのアドレスを返して処理を終了する

5以上の場合はpatternのアドレスをeaxレジスタに保存し、sediレジスタcountを4で割った値をecxレジスタに割り当ててrep stosl命令で4バイトずつメモリコピーを行う。 その後countを4で割った余りのバイト数分をstos命令でコピーしてsのアドレスを返して処理を終了する