c++ - win764位環(huán)境下,我用GCC為什么指針占8個(gè)字節(jié),而long是4個(gè)字節(jié)?
問(wèn)題描述
我用的工具是CFree套了個(gè)gcc的殼,寫代碼的時(shí)候偶然發(fā)現(xiàn),sizeof指針是字節(jié),而long是4字節(jié)。
且跑一個(gè)malloc最大申請(qǐng)空間代碼的測(cè)試程序得到結(jié)果是1.99g,所以說(shuō)明這個(gè)程序應(yīng)該還是32位的程序,
那么為什么指針的sizeof是8個(gè)字呢 ?
問(wèn)題解答
回答1:int long short具體多少字節(jié)都是implement defined ,具體多少看編譯器實(shí)現(xiàn),沒(méi)有絕對(duì)的多少,只有同一個(gè)編譯器才保證大小一致
如果要sizeof指針的話,確保你用的是sizeof(void*)
MinGW是LLP64,long就是32位。
注意你malloc的時(shí)候,參數(shù)使用signed int表示時(shí),那么在你申請(qǐng)2Gb內(nèi)存的時(shí)候,有可能把一個(gè)超過(guò)2^31的數(shù)放進(jìn)了signed int,數(shù)據(jù)溢出導(dǎo)致malloc失敗,你應(yīng)該使用size_t
如果你好奇你的程序是多少位,可以打開(kāi)任務(wù)管理器,32位的進(jìn)程后面會(huì)有*32的標(biāo)記
