原创 C++中malloc/free與new/delete的區別及內存分配失敗錯誤處理

首先談談C/C++內存分配失敗錯誤處理 一、C語言中的malloc/calloc/realloc/valloc/alloca/memalign函數: 這樣的內存分配函數在內存分配失敗時都返回空指針,因此,在調用返回時,檢查返回值的

原创 windows核心編程之並行、併發、同步、異步

1. 併發:   在操作系統中,是指一個時間段中有幾個程序都處於已啓動運行到運行完畢之間,且這幾個程序都是在同一個處理機上運行。其中兩種併發關係分別是同步和互斥 互斥:    進程間相互排斥的使用臨界資源的現象,就叫互斥。

原创 Windows核心編程之內核對象

在Windows操作系統中我們常常接觸的有三種對象類型: Windows內核對象 (事件對象,文件對象,進程對象,I/O完成端口對象,互斥量對象,線程對象等等):由執行體(Excutive)對象管理器(Object Manager)管

原创 源碼剖析之epoll(2)

1. 源碼剖析 本篇主要分析epoll_ctl以及相關函數 以下源碼取自4.10 1.1 epoll_ctl 用於添加/調整/刪除我們要監視的事件 fs/eventpoll.c /* * The following function i

原创 設計模式之Singleton模式

定義 保證類只有一個對象實例, 並提供一個訪問它的全局訪問點 難點 只有一個對象實例 提供一個全局訪問點 線程安全 代碼實現 方法一 在C++11之後,通過靜態局部成員變量的特性來實現單例模式 第一次調用getInstance實例化

原创 源碼剖析之epoll(1)

1. 源碼剖析 以下源碼取自4.10 1.1 核心數據結構 epitem fs/eventpoll.c /* * Each file descriptor added to the eventpoll interface will *

原创 指針和引用

1. 指針(pointer) 1.1 定義 指針(pointer)本質上是指向(point to)其他對象的對象,其內存中存儲的是地址,可以通過解引用操作間接的去訪問其指向內存對象(如果指針中存儲的是一個有效的地址) 1.2 初始化和賦值

原创 Git之修改commit

1、git commit --amend "new commit-description" 在提交後,發現提交的內容和描述都有偏差,首先在工作區進行相應修改,然後添加到暫存區,然後使用該命令, 並修改commit-descripti

原创 Memcpy/Memmove

方法一 void* myMemcpy(void* dst, const void* src, size_t num) { if(NULL == dst || NULL == src) return NULL

原创 源碼剖析之epoll(3)

1. 源碼剖析 本篇主要分析epoll_wait以及相關函數 以下源碼取自4.10 1.1 epoll_wait fs/eventpoll.c /* * Implement the event wait interface for th

原创 windows核心編程之服務(services)、函數(functions) 、例程(routines)

這幾個術語在用戶和編程的不同上下文中不着不同的意思,比如 service可能指OS中可調用的例程,設備驅動程序或者服務器進程,下面的列表描述了這些術語在本書中的表示的意義     例程                 例程的作用類似於函

原创 源碼剖析之wait queue

wait queue 在內核中,一般使用等待隊列(wait queue)實現當發生特定事件時的異步通知 具體方法如下: 1. 爲每個特定的事件(可讀、可寫等)維護一個等待隊列,本質上是一個雙向鏈表 2. 關心該事件的實體作爲等待隊列

原创 RAII

1. 資源 1.1 系統中的資源 內存 文件描述符 Socket套接字 內核同步/互斥資源(Mutex) 1.2 資源“泄露“     由於系統中的資源有限,所以在需要的時候去申請,在不需要的時候應該立即釋放。但是由於程序提前結束或者

原创 打印不大於N的所有素數

方法一 #include <iostream> #include <math.h> using namespace std; void printPrime(int n) { if(n < 2) return;

原创 源碼剖析之poll

1. poll    從內核的角度看來,藉助於VFS, 一切皆file // 文件表示 include/linux/fs.h struct file { const struct file_operations *f_