Một kiến trúc thuần Harvard nói chung sẽ cho phép một máy tính có mức độ phức tạp nhất định chạy nhanh hơn kiến trúc Von Neuman, với điều kiện là không cần chia sẻ tài nguyên giữa mã và bộ nhớ dữ liệu. Nếu các giới hạn pinout hoặc các yếu tố khác bắt buộc sử dụng một bus để truy cập cả hai không gian bộ nhớ, thì những ưu điểm đó có thể bị vô hiệu hóa phần lớn.
Một kiến trúc Harvard "thuần túy" sẽ bị giới hạn trong việc chạy mã được đưa vào bộ nhớ bởi một số cơ chế khác ngoài bộ xử lý sẽ chạy mã. Điều này giới hạn tiện ích của các kiến trúc như vậy đối với các thiết bị mà mục đích của nhà máy không đặt ra (hoặc ai đó có thiết bị lập trình chuyên dụng). Hai cách tiếp cận có thể được sử dụng để giảm bớt vấn đề này:
Một số hệ thống có các vùng mã và bộ nhớ riêng biệt, nhưng cung cấp phần cứng đặc biệt có thể được yêu cầu nhanh chóng chiếm lấy bus mã, thực hiện một số thao tác và trả lại quyền điều khiển cho CPU sau khi hoàn tất thao tác đó. Một số hệ thống như vậy đòi hỏi một giao thức khá phức tạp để thực hiện các hoạt động như vậy, một số hệ thống có các hướng dẫn đặc biệt để thực hiện một tác vụ như vậy và một số thậm chí còn xem các địa chỉ "bộ nhớ dữ liệu" nhất định và kích hoạt tiếp quản / giải phóng khi thực hiện một nỗ lực để truy cập chúng . Một khía cạnh quan trọng của các hệ thống như vậy là có các vùng bộ nhớ được xác định rõ ràng cho "mã" và "dữ liệu"; ngay cả khi CPU có thể đọc và ghi không gian "mã", nó vẫn được công nhận là khác biệt về mặt ngữ nghĩa với không gian dữ liệu. '
Một cách tiếp cận khác được sử dụng trong một số hệ thống cao cấp hơn là có một bộ điều khiển với hai bus bộ nhớ, một cho mã và một cho dữ liệu, cả hai đều kết nối với một đơn vị trọng tài bộ nhớ. Đơn vị đó lần lượt kết nối với các hệ thống con bộ nhớ khác nhau bằng cách sử dụng một bus bộ nhớ riêng cho mỗi hệ thống. Mã truy cập vào một hệ thống con bộ nhớ có thể được xử lý đồng thời với quyền truy cập dữ liệu vào hệ thống khác; chỉ khi mã và dữ liệu cố gắng truy cập cùng một hệ thống con thì người ta sẽ phải chờ.
Trên các hệ thống sử dụng phương pháp này, các phần không quan trọng về hiệu năng của chương trình có thể đơn giản bỏ qua ranh giới giữa các hệ thống con bộ nhớ. Nếu mã và dữ liệu xảy ra trong cùng một hệ thống con bộ nhớ, mọi thứ sẽ không chạy nhanh như thể chúng ở trong các hệ thống con riêng biệt, nhưng đối với nhiều phần của một chương trình điển hình sẽ không thành vấn đề. Trong một hệ thống điển hình, sẽ có một phần nhỏ mã trong đó hiệu năng thực sự quan trọng và nó sẽ chỉ hoạt động trên một phần nhỏ dữ liệu do hệ thống nắm giữ. Nếu một hệ thống có 16K RAM được chia thành hai phân vùng 8K, thì người ta có thể sử dụng các hướng dẫn liên kết để đảm bảo rằng mã quan trọng về hiệu năng được đặt gần điểm bắt đầu của không gian bộ nhớ chung và dữ liệu quan trọng về hiệu năng nằm gần kết thúc. Nếu kích thước mã tổng thể tăng lên, ví dụ 9K, mã trong 1K cuối cùng sẽ chạy chậm hơn mã được đặt ở nơi khác, nhưng mã đó sẽ không quan trọng về hiệu năng. Tương tự, nếu mã chỉ là 6K, nhưng dữ liệu tăng lên 9K, thì việc truy cập vào 1K dữ liệu thấp nhất sẽ chậm, nhưng nếu dữ liệu quan trọng về hiệu năng được đặt ở nơi khác, điều đó sẽ không gây ra vấn đề.
Lưu ý rằng mặc dù hiệu suất sẽ là tối ưu nếu mã dưới 8K và dữ liệu dưới 8K, thiết kế hệ thống bộ nhớ đã nói ở trên sẽ không áp đặt bất kỳ phân vùng nghiêm ngặt nào giữa mã và không gian dữ liệu. Nếu một chương trình chỉ cần 1K dữ liệu, mã có thể tăng lên tới 15K. Nếu nó chỉ cần 2K mã, dữ liệu có thể tăng lên 14K. Linh hoạt hơn nhiều so với việc có một khu vực 8K chỉ cho mã và một khu vực 8K chỉ cho dữ liệu.