Niestety, takie podejście wiąże się też z pewnymi kosztami.
Jednym z nich jest dość skomplikowana implementacja - nie tyle w sensie "trudności" ile w "ilości" kodu. W przypadku starszych, prostszych architektur jest to jeszcze relatywnie łatwe, ale dla komputerów współczesnych jest już pewnym wyzwaniem. Emulowanie 32-bitowego procesora Intela (tylko procesora, bez dodatkowego osprzętu) wiąże się z koniecznością wzięcia pod uwagę setek instrukcji maszynowych, wielu z nich w kilku odmianach w zależności od tego jakiej postaci są argumenty, w zależności od wartości flag, w dwóch trybach (rzeczywistym i chronionym), możliwości kodu 16- i 32-bitowego, czterech trybach uprzywilejowania... Do tego procesorów może być więcej niż jeden... Oczywiście problemy można mnożyć dalej - jeśli ktoś jest zainteresowany może przeczytać co napisali o tym twórcy pod adresem: http://www.diku.dk/hjemmesider/studerende/firefly/bochsdoc.html
Zasadniczym problemem jest jednak powolność takiego rozwiązania. Na tym przykładowym kodzie widać, że zaimplementowanie każdej instrukcji wymaga kilku/kilkunastu instrukcji w języku C, paru odwołań do pamięci, czego wynikiem jest to, że program efektywnie działa rzędu paręset wolniej w porównaniu z prędkością gospodarza.
Widać zatem, że z jednej strony jest o co walczyć. Zależy nam, żeby programy wykonywały się szybciej. Z drugiej, wydaje się, że bez zmiany sposobu nie uzyskamy znacznej poprawy sytuacji. Nie chcielibyśmy też tracić zalet poprzedniej metody.