20

バイトスピルとは?

C プログラムから生成された LLVM 中間表現から x86 ASM をダンプすると、通常は 4 バイト サイズの多数のスピルが発生します。なぜそれらが発生し、何を達成するのかわかりません。

それらはスタックの一部を「切り取る」ように見えますが、異常な方法です:

## this fragment comes from a C program right before a malloc() call to a struct.
## there are other spills in different circumstances in this same program, so it
## is not related exclusively to malloc()
...
sub ESP, 84
mov EAX, 60
mov DWORD PTR [ESP + 80], 0
mov DWORD PTR [ESP], 60
mov DWORD PTR [ESP + 60], EAX # 4-byte Spill
call malloc
mov ECX, 60
...
4

1 に答える 1