printf主要是給控制台列印字串或者數字等。
1、printf的引數列表printf ( const char *format, ... )
2、printf首先呼叫va_start.然後呼叫_output_l,最後呼叫_ftbuf
3、_output_l會解析字串並呼叫va_arg,獲取省略號的值,呼叫write_string寫到控制台上。
4、write_string會呼叫write_char,write_char會呼叫_putc_nolock,最終呼叫_flsbuf。
之前有人問printf("%f",1);為什麼列印的是0。
因為這種情況在va_arg(vl,double)獲取到值是0
printf的va_arg的彙編**如下:
623d9a24 mov edx,dword ptr [ebp+14h]
623d9a27 add edx,8
623d9a2a mov dword ptr [ebp+14h],edx
623d9a2d mov eax,dword ptr [ebp+14h]
623d9a30 mov ecx,dword ptr [eax-8]
623d9a33 mov edx,dword ptr [eax-4]
623d9a36 mov dword ptr [tmp],ecx
623d9a3c mov dword ptr [ebp-29ch],edx
剖析printf函式
printf是什麼,對於起初學習c語言的同學來說肯定都特別的疑惑。在這裡,解答一下 它是乙個函式。既然是乙個函式的話,想必肯定有返回值和引數吧。那麼它的返回值和引數是什麼呢?1 看一下這個例子,可能更好理解點 這個看起來只是個printf函式,但它卻在printf函式基礎上巢狀了好幾層printf,...
PGA深入剖析
pga pga系統全域性區 program global area 程序全域性區 process global area pga是乙個記憶體區域,該區域包含了一些與某個特定伺服器程序相關的資料和控制資訊,每個程序都有自己的私有pga區,所以這塊區域只能被其所屬程序進入,而不能被其他程序訪問,所以在p...
epoll LT ET 深入剖析
epoll lt et 深入剖析 epoll事件有兩種模型 level triggered lt 水平觸發 socket接收緩衝區不為空 有資料可讀 讀事件一直觸發 socket傳送緩衝區不滿 可以繼續寫入資料 寫事件一直觸發 符合思維習慣,epoll wait返回的事件就是socket的狀態 ed...