64ubuntu编译32位程序
今天做實驗,64位ubuntu,sizeof指針得到8
想編譯成32位程序
百度
需要安裝32位庫,已經安裝了 libc6 libc6-dev
報錯fatal error: sys/cdefs.h: No such file or directory
需要
sudo apt-get install libc6-dev-i386
然后再編譯
ning@ubuntu:~/Documents$ gcc sizeof.c -m32 sizeof.c: In function ‘main’: sizeof.c:10:11: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘unsigned int’ [-Wformat=]printf("sizeof(p)=%ld\n",sizeof(p));^ ning@ubuntu:~/Documents$ gcc sizeof.c -m32 ning@ubuntu:~/Documents$ ./a.out sizeof(p)=4 ning@ubuntu:~/Documents$ gcc sizeof.c sizeof.c: In function ‘main’: sizeof.c:10:11: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]printf("sizeof(p)=%d\n",sizeof(p)); 程序運行平臺
??????不同的平臺上對不同數據類型分配的字節數是不同的。
??????個人對平臺的理解是CPU+OS+Compiler,是因為:?
??????1、64位機器也可以裝32位系統(x64裝XP);?
??????2、32位機器上可以有16/32位的編譯器(XP上有tc是16位的,其他常見的是32位的);?
??????3、即使是32位的編譯器也可以弄出64位的integer來(int64)。?
??????以上這些是基于常見的wintel平臺,加上我們可能很少機會接觸的其它平臺(其它的CPU和OS),所以個人認為所謂平臺的概念是三者的組合。?
??????雖然三者的長度可以不一樣,但顯然相互配合(即長度相等,32位的CPU+32位的OS+32位的Compiler)發揮的能量最大。?
??????理論上來講 我覺得數據類型的字節數應該是由CPU決定的,但是實際上主要由編譯器決定(占多少位由編譯器在編譯期間說了算)。
常用數據類型對應字節數
??可用如sizeof(char),sizeof(char*)等得出
?32位編譯器:
??????char :1個字節
??????char*(即指針變量): 4個字節(32位的尋址空間是2^32, 即32個bit,也就是4個字節。同理64位編譯器)
??????short int : 2個字節
??????int:? 4個字節
??????unsigned int : 4個字節
??????float:? 4個字節
??????double:?? 8個字節
??????long:?? 4個字節
??????long long:? 8個字節
??????unsigned long:? 4個字節
??64位編譯器:
??????char :1個字節
??????char*(即指針變量): 8個字節
??????short int : 2個字節
??????int:? 4個字節
??????unsigned int : 4個字節
??????float:? 4個字節
??????double:?? 8個字節
??????long:?? 8個字節
??????long long:? 8個字節
??????unsigned long:? 8個字節
總結
以上是生活随笔為你收集整理的64ubuntu编译32位程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 经典永不过时!黑色成印度最受欢迎的智能手
- 下一篇: 暴涨500% 特斯拉降价后门店订单激增