2014-04-02 69 views
2

我讀過幾篇文章,建議不要將int轉換爲void *或void *爲int。我需要設置一個指向特定地址的指針,並且我知道該怎麼做的唯一方法...如何安全地設置void *到特定地址C++

#define MEMORY_ALLOC_START_ADDR 0x7E00 
void * address = (void*)MEMORY_ALLOC_START_ADDR; 

這是安全和'正確的'嗎?我只需要投入一個空白*而不是相反。我認爲分配它的唯一方法是使用擴展內聯彙編。我問,所以我不會遇到意外的問題。

+0

你如何驗證你的固定內存地址是否每次都正確。代碼看起來不錯,但我認爲在地址處使用一些固定號碼不是個好主意。 –

+0

你在做某種微控制器或SOC器件編程嗎?例如,我懷疑這些文章可能是爲「大多數」開發人員的角度編寫的,沒有考慮到某些類型的沒有MMU的低級嵌入式系統。 也許你可能會發布鏈接,上下文? – 6EQUJ5

+0

@MantoshKumar實模式而不是保護。我沒有選擇,只能使用固定地址 – user3141117

回答

4

這應該沒問題,只要該地址在您定位的任何系統上都有效即可。

一般而言,void*int之間的轉換可能導致故障時,兩種類型是不相同的尺寸(如在x64其中void*是64位和int只有32 - 轉換void*int會有失去一半價值)。

+0

好的,謝謝你,我認爲只是確保 – user3141117

+0

C語言風格的轉換不是'reinterpret_cast <>'首選的C++ ? – franji1