簡體   English   中英

自定義VM中有多少個寄存器?

[英]How many registers in custom VM?

我正在設計一個自定義VM,並且對應該使用多少個寄存器感到好奇。 最初,我有255個,但是我有點擔心每次我調用一個函數時都會將255個指針(整個KB)備份到堆棧或堆上,而大多數時候它們甚至都不會被使用。 我應該使用多少個寄存器?

您可能希望查看寄存器窗口 ,這是一種減少任何時間可用的“活動”寄存器數量的方法,同時仍將大量寄存器保留在內核中。

話雖如此,您可能會發現使用基於堆棧的體系結構更為方便。 打算在軟件中實現的某些主要虛擬機(JVM,CLR,Python等)使用堆棧體系結構。 當然,為堆棧編寫編譯器要比人為限制的寄存器集要容易得多。

通常,這取決於您認為需要多少。 我質疑255個寄存器在實際應用中的有用性。

我構建的最后一個寄存器機器旨在支持一種小型編程語言,並且在進行映射時,我查看了應用程序的類型,我想指導人們使用的設計方法,並在設計寄存器時平衡了所有這些與性能問題文件。

沒有更多細節,這不是容易回答的事情,但是,如果您停下來想一想自己要做什么,並在發現重要問題的各個方面進行權衡,就會得出結論:一起生活,這可能是有道理的。

無論選擇多少個寄存器,對於大多數子例程而言,您可能都有太多的選擇,而對於少數子例程而言,則可能會有太多的選擇。 (這只是一個猜測。但是,考慮到編程中遵循冪定律分布的內容有多少–對象,模塊,類的傳入引用,對象,模塊,類的傳入引用,子例程的圈復雜度,子例程的NPath復雜度,SLOC子例程的長度,對象的生存期,對象的大小–僅合理地假設子例程的寄存器數量是相同的,尤其是在您認為復雜度/長度與寄存器數量之間可能存在相關性的情況下)

派諾特VM已找到解決此難題的簡單方法:它們具有無限數量的寄存器。 顯然,這些寄存器不是存儲在無限數組中,而是它們懶惰地實現了足以用於任何單個子例程的寄存器。 這樣,它們永遠不會用完寄存器,也不會浪費任何空間。

對不起大家。 我對這個愚蠢。 事實證明,我已經有了一個寄存器向量來優化對堆棧的訪問,而我完全忘記了。 與其復制它們,不如將它們設置為引用堆棧寄存器的狀態。 現在,我需要做的就是專門推動直接推到寄存器,並以一種高效的方式解決問題。 這些寄存器也永遠不需要支持,因為它們與功能無關,並且將根據我的堆棧進行完善。 我從來沒有想到我可以將值推入它們而無需將等效值推入堆棧。

絕對可怕的模板混亂使它變成了簡單的設計概念,盡管這讓我非常不高興。 要購買:靜態if和可變參數模板。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM