※ 引述《meltice.bbs@bbs.cs.nccu.edu.tw (三億兩千萬大散戶)》之銘言:
> 先不要講不同作業系統的不同API
> 也不要比較不同作業系統的執行檔格式不同
> cout << "Hello, world!" << endl;
> 這段程式應該只用到C++的library吧
> 那這段程式的object code可以跨平台嗎?
> WinXP跟linux的cout的底層實做會一樣嗎?
> 我猜應該不會一樣吧
這會用到 kernel API,也就是 system call。
根據 OS 教科書以及幾乎所有 dual-mode 的 OS 實作,
與 I/O 相關的 hardware instructions 大都被設定為特權指令,
所以 C++ library 本身對 cin/cout 的實作還是會去呼叫到 system call,
跟 OS 要求 I/O 服務,
通常是把一些值放進特定的 registers 然後呼叫某個編號的軟體中斷,
每個 OS 有自己的中斷向量表,有自己的中斷服務常式,
還有自己的參數傳遞規則(也算是 ABI 的一部份)。
所以換 OS 可能這些 binary code 就不能動了,
除非 ABI 一樣或是有 emulator。
Anyway, cin/cout 是 C++ 中極少數的 machine-dependent 實作,
某些 Embedded System 不見得會有辦法用。
--
Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net
School: National Chung Cheng University
Department: Computer Science and Information Engineering
Researching: GNU Toolchain Porting for Unified RISC/DSP Processor with VLIW
Homepage: https://it.muds.net/~uranus
--
╔═══╗ ┼────────────────────────╮
║狂狷 ║ │* Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮
║ 年少║ ┼╮ < IP:140.119.164.16 > ╰─╮
╚╦═╦╝ ╰ * From:218-171-137-95.dynamic.hinet.net
─╨─╨─ KGBBS ─ ◎ 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩 ◎