如何訪問位於機器位置0的中斷向量?如果我將指針設置爲0,則編譯器可能會將其轉換爲某個非零內部空指針值。如何訪問位於機器位置0的中斷向量?
2
A
回答
1
由於任何位置0顯然都與機器相關,所以您可以自由使用任何與機器相關的技巧。閱讀供應商的文檔。很可能,如果您訪問位置0對您來說完全有意義,系統將設置爲使其合理地輕鬆完成此操作。一些可能性是:
只需將一個指針設置爲0.(這是不需要工作的方式,但如果它有意義的話,它可能會發生)。 將整數0賦值給一個int變量,並將其轉換int指向一個指針。 (這也不能保證工作,但它可能會吧。) 使用聯合的指針變量的位設置爲0:
union {
int u_p;
int u_i; /assumes sizeof(int) >= sizeof(int *) */
} p;
p.u_i = 0;
使用memset的一個指針變量的位設置爲0:
memset((void *)&p, 0, sizeof(p));
聲明一個外部變量或數組
extern int location0;
並使用匯編語言文件,或一些特殊的連接器調用,來安排這個符號是指(ⅰ。即變量被放置在)地址0.
2
根據你的C實現,你是正確的,內部空指針可能不是0.但通常是。如果您想要非常安全,則可以鍵入值,或使用memset()
。
uintptr_t zerobits = 0;
void *pointer1 = (void *)zerobits;
或:
void *pointer2;
memset(&pointer2, 0, sizeof pointer2);
2
如果你在哪裏,你需要閱讀的零地址/寫矢量(?我想你是在某種嵌入式系統)域工作,那麼你會發現你所做的很多事情將不在「C」標準的一般直接中間解釋之外。
您可以非常安全地假設嵌入式編譯器會生成對放入指針的地址的訪問,而不會奇蹟般地更改其內容。
但是,您不能始終假定數據表中的物理地址零是處理器在讀取/寫入地址零時訪問的內容。如果處理器中有MMU,那麼您可能需要經過某種邏輯 - >物理映射過程,即使沒有完整的MMU,許多現代小型嵌入式處理器也會在中斷周圍使用地址空間進行遊戲矢量(例如,從閃存引導,然後可選地將該部分地址空間重新映射到RAM)。
相關問題
- 1. 容器位於主機的文件系統中的位置?
- 2. 當位置訪問關閉時,無法訪問基於網絡的位置
- 3. OpenGL位置向量
- 4. 如何訪問onItemSelected()中的位置變量
- 5. iPhone手機訪問iPhone位置服務
- 6. 如何根據位置指示器交織R中的向量
- 7. 如何訪問iframe的當前位置?
- 8. iPhone - 我如何獲得基於學位的位置的方向
- 9. 如何檢查位置是可訪問和追加到位置
- 10. 通過內存位置訪問變量
- 11. stl向量如何隨機訪問
- 12. 基於地理位置首次訪問時重定向用戶
- 13. 訪問iPhone的位置
- 14. 如何從網頁訪問iPhone位置?
- 15. 訪問全局向量時出現「訪問衝突讀取位置」
- 16. 在層次結構中的任何位置訪問變量Java
- 17. 如何使用手機訪問網絡位置
- 18. 訪問虛擬機中的Hadoop後Eclipse Europa中的DFS位置
- 19. 使用STL的向量中的位置
- 20. 用於軟件開發的32位與64位機器問題
- 21. 如何保存客戶機時間如果服務器位於不同位置
- 22. 從eclipse訪問SVN倉庫(位於另一個ubuntu機器)
- 23. 如何設置顏色位置「0」 ExpandableListview
- 24. 如何重定向我的本地主機指向的位置?
- 25. 矢量化其訪問非連續的存儲器位置
- 26. 位向量爲0和1的整數向量
- 27. 只能訪問位置管理器
- 28. 如何訪問/ ping位於AWS上的服務器?
- 29. 元素在向量中的位置
- 30. Stream.Seek(0,SeekOrigin.Begin)或位置= 0
您應該使用'unsigned'而不是'int'。另外,假設用戶程序在讀取地址零時不會產生內存錯誤。 – 2010-07-27 21:26:01
這就是問題的假設。 – aib 2010-07-27 21:27:09