linuxのメモ

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

メモリ割り当て - __constant_c_memset()

概要

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

詳細

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

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

拡張インラインアセンブラで以下の処理を行う

  • sediレジスタに、ceaxレジスタに、countを4で割った値をecxレジスタに割り当ててrep; stosl命令で4バイトずつメモリのコピーをcountを4で割った回数分繰り返す
  • countの下位2ビット目のビットが立っている場合、stosw命令で2バイト分のメモリをコピーする
  • countの最下位ビットのビットが立っている場合、stosb命令で1バイト分のメモリをコピーする
  • sのアドレスを返して処理を終了する