原创 getcontext存的是哪個指令的地址?

#include <stdlib.h> #include <ucontext.h> #include <stdio.h> int main() { ucontext_t uc; int a = 2, b = 3;

原创 如何判斷一個內存地址屬於進程的哪一段?

先打印出某個地址,然後阻塞(getchar())進程,查一下進程的 id,然後執行Linux 命令pmap {pid} 查看進程的空間佈局(MAC 使用vmmap {pid}),將之前打印的地址對應到某一段。 using namespace

原创 [原創] KCP 源碼解析(下)

ikcp_input 先從下層協議將數據讀出來,並將對應的包頭信息解析出來,根據不同的包頭命令進入不同的處理邏輯。 int ikcp_input(ikcpcb *kcp, const char *data, long size) { I

原创 [原創] KCP 源碼分析(上)

KCP 協議是一種可靠的傳輸協議,對比 TCP 取消了累計確認(延遲 ACK)、減小 RTO增長速度、選擇性重傳而非全部重傳。通過用流量換取低時延。 KCP 中最重要的兩個數據結構IKCPCB和IKCPSEG,一個IKCPCB對應一個 KC

原创 C++ 萃取機 Iterator Traits

Iterator Traits 萃取出 Iterator 的性質:迭代器種類、迭代器所指數據類型、迭代器距離類型、迭代器所指數據引用、迭代器所指數據指針。根據不同的迭代器種類可以採取不同的算法策略。但是用iter::interator_ca

原创 C++保證線程安全的方式

1、互斥量 可以確保同一時間只有一個線程訪問臨界區,防止出現競態條件。 2、原子操作 std::atomic<int> mutex(1); 對原子變量的操作是線程安全的。 3、讀寫鎖 std::shared_mutex mutex; //

原创 經典同步問題及其僞代碼實現

1、生產者消費者問題 信號量版本: // 定義緩衝區大小 bufferSize = 10 // 定義互斥鎖和信號量 mutex = Semaphore(1) full = Semaphore(0) empty = Semaphore(buf

原创 new vs malloc

https://www.cnblogs.com/qg-whz/p/5140930.html 1、申請內存位置 new操作符從自由存儲區(free store)上爲對象動態分配內存空間,而malloc函數從堆上動態分配內存。自由存儲區是C++

原创 C++4中cast類型強制轉換方式

static_cast<type_id>(expr) 用於基本類型的轉換,也可以將繼承關係的對象指針或引用之間進行上下轉型,但是在沒有運行時類型檢查的情況下,不保證類型安全。 static_cast<type_id>(expr) 動態轉換用

原创 C++多態底層原理:虛函數表

虛函數表 C++ 對象模型 在有虛函數的情況下,C++對象的模型可以概括爲:虛函數表指針+數據struct。在對象所在的內存裏:前8個字節(64位系統)是虛函數表所在地址,後邊是對象中的member data。在多態的實現裏,父指針就是根據

原创 菱形繼承(轉載)

原地址:https://www.cnblogs.com/longcnblogs/p/7642951.html 一、C++中的對象模型 1、 概念 語言中直接支持面向對象程序設計的部分; 對於各種支持的底層實現機制。(沒看懂……) 2、 類中

原创 xargs參數

功能:將標準輸入分割後轉化爲命令參數。 例子:echo "*.py"| xargs find ./ -name,查找當前目錄下的所有py文件。 -d 制定分隔符 默認情況下,xargs將空格和換行符作爲分隔符,xargs -d "\t" c

原创 .inputrc 鍵盤映射

set completion-ignore-case on #meta a 向前移動一個單詞 "\eq":backward-word #meta s 向後移動一個單詞 "\ew":forward-word #meta a 移動到開頭

原创 [模板]01trie,維護異或最大值

// 查詢異或最大值,每次插入和查詢時間都是log(C) template<class T> class trie01 { vector<vector<T>> tree; public: trie01() : tree(1,

原创 powershell profile

function welcome { echo " _ _ _ _ _ __ _