看板 C_and_CPP 關於我們 聯絡資訊
typedef struct Str_ { char c; int a; }Str; Str ret_str() { Str str; str.c='a'; str.a=1; return str; } int main(int argc, char *argv[]) { Str s; s = ret_str(); s.c='c'; s.a=5; return 0; } descent@debianlinux:return_struct$ gcc rs.c -o rs descent@debianlinux:return_struct$ g++ rs.c -o rscpp descent@debianlinux:return_struct$ ls -l rs rscpp -rwxr-xr-x 1 descent descent 4912 Dec 4 19:47 rs -rwxr-xr-x 1 descent descent 5128 Dec 4 19:47 rscpp 我一直以為這樣的程式用 c++ compiler 編出來應該要和 c compiler 的大小一樣。
LiloHuang: 用 nm 比較看看,CPP的版本應該會多出不少東西 XD 12/04 19:59
LiloHuang: 如果整個程式碼用 extern "C" {} 包住應該會很接近才是 12/04 20:02
LiloHuang: 我想 C++ 編譯器應該會多做 name mangling 的部分 12/04 20:03
chchwy: c++標準庫比C大多了. 12/04 22:33
littleshan: 因為g++會看副檔名,看到.c還是會用c compiler去編 12/04 22:40
littleshan: 唯一的差別是g++會多連結libstdc++ 12/04 22:40
littleshan: 你用 gcc rs.c -o rs -lstdc++ 出來大小就一樣了 12/04 22:41
LiloHuang: 我記得 g++ 的文件有寫,預設都會用 C++ compiler ... 12/04 23:08
LiloHuang: g++ is a program that calls GCC and treats `.c', 12/04 23:08
LiloHuang: `.h' and `.i' files as C++ source files instead of 12/04 23:09
LiloHuang: C source files unless -x is used. 12/04 23:09
LiloHuang: http://goo.gl/9QRrzC 官方文件出處 12/04 23:09
littleshan: 噢,那是我弄錯了 12/05 00:35
其實我有反組譯看過, 的確是編出不同的組合語言, 只是我看不懂差異點。 ret_str() 用 g++ compiler 編出來的組合語言其實比較短, 但 main 的部份, c 比較短。 我一直相信只使用和 c 一樣的部份, 用 c++ compiler 的程式碼應該和 c 一樣快, 還是這個例子並不符合這樣的條件。 ※ 編輯: descent (114.39.169.73), 12/05/2014 11:06:36