0
This commit說:爲什麼AMD GCN使用非零NULL?
在amdgcn目標,在全局,常量和普通地址空間取值爲0,但在私人和本地地址空間的取值爲-1空指針空指針。
他們如何使用NULL的那兩個不同的值?
This commit說:爲什麼AMD GCN使用非零NULL?
在amdgcn目標,在全局,常量和普通地址空間取值爲0,但在私人和本地地址空間的取值爲-1空指針空指針。
他們如何使用NULL的那兩個不同的值?
至於爲什麼:我不知道這個事實,但本地/私有地址空間指針幾乎可以肯定只是作爲平面物理寄存器文件/內存區域中的偏移/索引實現。沒有類似虛擬內存的地址重新映射,只是一個大陣列。你仍然希望能夠訪問數組索引0,所以「無效指針」(無效索引)需要是別的。
不要忘記,NULL =非可提領的指針= 0只是一個約定定期C,太 - 一些非OpenCL的系統也有有效的內存地址爲0有標準有關memset的一些併發症等等,所以如果您對準確的規格感興趣,您可能最好自己閱讀文檔。
我不確定你在詢問關於「如何」 - 你不能在不同的OpenCL地址空間中明智地轉換指針,所以這裏沒有衝突。
C標準做出了種種努力,使空從整數0和布爾值false別無二致,但沒有提到它必須在機器代碼級別爲0。我的猜測是,在這些地址空間中,0被保留爲有效地址。 – user3528438
你的問題不清楚。標題問「爲什麼?」文中問「如何?」;除非你的意思是「這怎麼可能是有效的C?」,這是另一個問題,「如何」似乎在提交中被徹底解釋。請更具體一些。 – rici
我在一臺機器上工作了很長時間,其中null是0xffffffff(即-1)。我覺得奇怪的是來到一個0 == null的系統。我的意思是0是一個完全有效的地址,它是RAM的第一個字節。 – pm100