簡體   English   中英

如何 map 一個 32 位 memory 地址來自 CPU 到 Z0D69B4957F06CD818D7BF3D61980E291Z 在 Z0D61F8374D141D412F78ZB3

[英]How to map a 32 bit memory address coming from CPU to a local memory in C

所以我有一個使用隊列的較小級別的緩存實現,我有一個跟蹤文件,它以 CPU 生成的方式生成讀取和寫入流,例如。 讀取位置 0x20000064(32 位地址)。 在我的 main.c 中,我使用特定維度的數組實現了一個全局 memory 來模擬 RAM memory 的行為。 但是問題是,我正在解碼訪問 memory 以獲取緩存的標記和偏移位的 32 位地址,但數組地址索引從 0 到 1023 開始,例如對於 int array[1024]。我如何 map 這里是 32 位地址到地址,就像我希望索引從 20000000 開始,直到讓我們說 30000000 而不是從 0 到 10000000。有些類似於 hash 表。

如果我正確理解您要做什么,您將希望利用大多數 memory 地址未使用的事實。 現代處理器上的地址空間是巨大的,但我懷疑您將用於您的應用程序的測試數據將使用其中的一小部分。 或許您可以先了解頁面大小(例如 4096 字節),然后創建每個頁面的基地址 hash 到該頁面的存儲數組。 然后,當您需要查找地址時,使用“address-address%page_size”計算頁面基地址,在 hash 頁面中查找數組,然后您想要的值位於其中的“(address%page_size)”大批。 從你的問題中說出你想要什么有點困難,但我希望這個建議能給你一些工作。

暫無
暫無

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

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