Arsitektur Harvard murni umumnya akan memungkinkan komputer dengan tingkat kompleksitas tertentu untuk berjalan lebih cepat daripada arsitektur Von Neuman, asalkan tidak ada sumber daya yang perlu dibagi antara kode dan memori data. Jika batasan pinout atau faktor lain memaksa penggunaan satu bus untuk mengakses kedua ruang memori, keuntungan semacam itu cenderung dibatalkan.
Arsitektur Harvard yang "murni" akan terbatas pada menjalankan kode yang disimpan dalam memori oleh beberapa mekanisme selain prosesor yang akan menjalankan kode. Ini membatasi kegunaan arsitektur seperti itu untuk perangkat yang tujuannya tidak ditentukan oleh pabrik (atau seseorang dengan peralatan pemrograman khusus). Dua pendekatan dapat digunakan untuk mengatasi masalah ini:
Beberapa sistem memiliki area kode dan memori yang terpisah, tetapi menyediakan perangkat keras khusus yang dapat diminta untuk mengambil alih kode bus secara singkat, melakukan beberapa operasi, dan mengembalikan kontrol ke CPU setelah operasi tersebut selesai. Beberapa sistem seperti itu memerlukan protokol yang cukup rumit untuk melakukan operasi seperti itu, beberapa memiliki instruksi khusus untuk melakukan tugas seperti itu, dan beberapa bahkan menonton untuk alamat "memori data" tertentu dan memicu pengambilalihan / rilis ketika suatu upaya dilakukan untuk mengaksesnya . Aspek kunci dari sistem tersebut adalah bahwa ada area memori yang ditentukan secara eksplisit untuk "kode" dan "data"; bahkan jika mungkin bagi CPU untuk membaca dan menulis ruang "kode", itu masih diakui secara semantik berbeda dari ruang data. '
Pendekatan alternatif yang digunakan dalam beberapa sistem kelas atas, adalah memiliki pengontrol dengan dua bus memori, satu untuk kode dan satu untuk data, yang keduanya terhubung ke unit arbitrase memori. Unit itu pada gilirannya terhubung ke berbagai subsistem memori menggunakan bus memori terpisah untuk masing-masing. Akses kode ke satu subsistem memori dapat diproses secara bersamaan dengan akses data ke yang lain; hanya jika kode dan data mencoba mengakses subsistem yang sama secara bersamaan maka salah satu harus menunggu.
Pada sistem yang menggunakan pendekatan ini, bagian-bagian non-kinerja-kritis dari suatu program mungkin mengabaikan batas-batas antara subsistem memori. Jika kode dan data berada di subsistem memori yang sama, semuanya tidak akan berjalan secepat jika mereka berada di subsistem yang terpisah, tetapi untuk banyak bagian dari program biasa yang tidak masalah. Dalam sistem tipikal, akan ada bagian kecil dari kode di mana kinerja benar-benar penting, dan itu hanya akan beroperasi pada sebagian kecil dari data yang dipegang oleh sistem. Jika seseorang memiliki sistem dengan 16K RAM yang dibagi menjadi dua partisi 8K, seseorang dapat menggunakan instruksi linker untuk memastikan bahwa kode kritis kinerja terletak di dekat awal keseluruhan ruang memori, dan data kritis kinerja dekat akhir. Jika ukuran kode keseluruhan tumbuh menjadi misalnya 9K, kode dalam 1K terakhir akan berjalan lebih lambat daripada kode yang ditempatkan di tempat lain, tetapi kode itu tidak akan kritis terhadap kinerja. Demikian juga, jika kode misalnya hanya 6K, tetapi data tumbuh menjadi 9K, akses ke data 1K terendah akan lambat, tetapi jika data kritis-kinerja terletak di tempat lain, itu tidak akan menimbulkan masalah.
Perhatikan bahwa sementara kinerja akan optimal jika kode di bawah 8K dan data di bawah 8K, desain sistem memori yang disebutkan di atas tidak akan memaksakan partisi ketat antara kode dan ruang data. Jika suatu program hanya membutuhkan 1K data, kode dapat tumbuh hingga 15K. Jika hanya membutuhkan 2K kode, data dapat tumbuh hingga 14K. Jauh lebih fleksibel daripada memiliki area 8K hanya untuk kode dan area 8K hanya untuk data.