大家看到這個不要好奇,我也是在分析結構體大小時想到的,
我們大家都知道在windows底下,我們想編譯一個c程序(用64位和32位分別編譯,特別不方便),除非是雙系統,或者虛擬機,但是裝這些有時候挺麻煩的,
但是但是,在linux底下這可是很方便的,
我們來看:
一 .查看當前linux系統到底是多少位!!!
方法1:
getconf LONG_BIT
我們在linux終端下敲入這個命令:出現32(那麼就是32位系統),出現64(那麼就是64位系統)
大家看運行結果:
方法二:
file /sbin/int
同樣我們在linux終端下敲入這個命令:
大家來看運行結果:
方法三:
我覺得這是最簡單的東西了:也好記:
uname -a
運行結果:
方法四:
dpkg --print-architecture
運行結果:
上面的一切都說明我的系統是64位:
好,接下來我們需要做的就是配置,讓它也可以進行32位的編譯
(插曲)
在安裝 Ubuntu 的時候建立的帳戶 sai,想把密碼改成兩個字母aa,方便輸入。
運行終端
sai@xmomx:~$ passwd sai
更改 sai 的密碼。
(當前)UNIX 密碼: xx
輸入新的 UNIX 密碼: aa
重新輸入新的 UNIX 密碼:aa
必須選擇更長的密碼
輸入新的 UNIX 密碼: 1234567
重新輸入新的 UNIX 密碼: 1234567
Bad: new password is too simple
輸入新的 UNIX 密碼:
綠色爲手動輸入。怎麼辦?加上su權限執行即可。這樣來做:
方案一:
sai@xmomx:~$ sudo passwdsai
[sudo] password for sai: xxx
輸入新的 UNIX 密碼: aa
重新輸入新的 UNIX 密碼: aa
passwd:已成功更新密碼
假如我們並沒有配置,就直接用 的話,會報錯
程序1:
#include <stdio.h>
struct stu{
char a;
double b;
char c;
};
int main(){
struct stu ss;
printf("%d\n", sizeof(ss));
return 0;
}
我們先看一下,在64位下運行的結果:
然後我們再看一下,在32位下運行的結果(我們直接用,也就是說是還沒有配置,如:gcc test.c -m32),回報錯:
好,接下來,到啦我們該配置的時候來:
步驟二(配置多構架內核,也就是同時支持64,32位)
(1),確認打開多構架
dpkg --print-foreign-architectures
出現結果:i386,則爲已經打開
(2),打開多構架支持功能
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get dist-upgrade
依次執行上面的命令
另外第三個命令執行時間有點長,(哈哈,夠大家去吃個飯,衝個coffee了,大家耐心等待吧!!!)
當我們敲完上面的命令時就說明,已經支持一部分了,但是現在,我們的程序還不能完全運行
接着我們還要輸入如下命令:
sudo apt-get install gcc-multilib g++-multilib
這時我們的編譯器已經完美了,也就是說用這個命令(gcc test.c -m32)
大家可以看一下我們程序運行的結果:
好了,0k,我們的編譯器完成了我們的目標了。
但是,但是,大家注意到了嗎?,對於linux,64,32位,它們分配內存情況並不一樣(同樣的結構體),我們可以看到
對於上面的程序
32位: 結構體大小位16
64位: 結構體大小位24
至於爲什麼??大家可以看這個鏈接:http://blog.csdn.net/msdnwolaile/article/details/50158463點擊打開鏈接
從內存的角度分析了編譯器分配的過程
(ps:上面配置32位的過程,借鑑與:http://www.cnblogs.com/mliudong/p/4086797.html,
點擊打開鏈接 謝謝你啊!!)