2009-10-15 56 views
10

讓我先澄清一下,我現在非常熟悉size_tintptr_t的定義,我不想重複他們完成的任何事情。size_t在實踐中是指針大小

相反,我想知道以下內容。你知道的任何平臺,除了的x86/DOS(其難以承受的內存模型),其中投

void* a = ...; 
size_t b = (size_t)a; 

實際上失去位或字節?

謝謝!

+7

你爲什麼要投一個指向size_t的指針??? – 2009-10-15 12:47:53

+0

作爲一個側面說明,我甚至無法想象這樣的問題可能來自哪裏。爲什麼你會想要做這樣的演員? 'size_t'的大小和指針的大小是完全無關的,所以很自然地假設這樣的平臺存在於一般情況下,不管它們是否存在於現實中。 – AnT 2009-10-15 16:29:17

+1

假設'size_t'的大小和指針的大小是相同的,並且沒有新的代碼應該用這個假設來編寫可能不是好的做法,我可以看到這樣的問題可能來自哪裏:遺留代碼。我想象那裏有很多*代碼就是這個假設。就像有很多假設int或long的代碼是32位(不多也不少 - 這就是MS爲Win64選擇LLP64模型的原因)。有人(甚至可能是Jonas)可能想要確定花費時間和精力來主動更改遺留代碼是否值得。 – 2009-10-15 19:11:44

回答

7

AFAIK,AS/400指針是128位,但是size_t is defined to be 32-bit

+0

有趣! sizeof(長)產量是多少? – 2009-10-15 13:02:11

+0

似乎很長是[64位](http://search400.techtarget.com/tip/0,289483,sid3_gci1114170,00.html),但不能肯定地說。 – 2009-10-15 13:33:09

+1

更重要的問題是:您能否提供一個示例,指向size_t的指針是否是有效的代碼? – 2009-10-15 14:34:01