linux 管道溢位問題分析

2021-08-19 23:34:31 字數 699 閱讀 8142

由於專案中的執行緒間通訊使用到libuv中的pipe,由於libuv的高效能非同步結構,資料傳輸速度很快。為了方便資料解析試用了結構體,比如:

typedef struct a{

a[1024*10];

};

可以看到乙個資料報有10kb,在系統中檢視系統管道大小:

pipe_buf 大小:512*8 = 4kb,那豈不是乙個包就溢位了,然而還有乙個pipe最大容量,man 7 pipe 檢視:

最大容量是 65536 bytes = 64kb

接下來,如果pipe write執行緒的寫的比較快,或者pipe read執行緒由於某個處理耗時長,導致管道裡有6個資料報沒有取出,再往裡寫就會提示resource temporarilly unvailable,甚至出現段錯誤。

這個問題解決也容易,pipe wirte 速度 < pipe read速度即可,這樣就不會溢位了,pipe read 的優化也很重要。

棧溢位問題分析

近日,程式總是莫名其妙的coredump,而且還是在變數定義的時候 如 int a 1 百思不得其解。在這種情況下,只有幾種情況可能出現 記憶體踩踏 棧溢位。在經過長時間的分析確認,肯定不是記憶體踩踏。剩下的就是棧溢位了。linux下一般單個程式棧大小為10m,可用ulimit s查閱。一般情況下,...

ARM 堆疊溢位問題

今天一大早就有個師弟在qq上問了我乙個問題,先把 貼出來.softwareinterrupt stmfd sp mov r1,sp mrs r3,spsr tst r3,t bit thumb mode ldrneh r0,lr,2 yes,fetch swi no.in thumb mode bi...

unsigned char 數值溢位問題

include int main void 在vc 中的輸出結果是 0256 press any key to continue 這說明了 語句 unsigned char 申請的空間 所能儲存的數字的範圍 也就是unsigned char型別所能表示的數的範圍 是 0 255 十進位制 一共 25...