原创 Linux內存管理 -- 虛擬地址映射
在32位地址下,進程的虛擬地址空間是4GB,需要將虛擬地址與物理內存連接起來,通過分頁機制。 物理內存,操作系統將物理內存分成一塊一塊大小爲4KB 都相同的頁。 4G的虛擬地址空間 頁的大小是4KB, 即有4M的頁,4M 的大小就是 1K
原创 hash表的實現
hash應用非常多,當問到大數據處理時 要求實現一個hash的時候可能有點懵... 下邊時hash表的實現,散列容器,用的是拉鍊法,帶註釋 // // Created by yanpan on 2019/8/12. // #if 0 #
原创 GDB調試
1.gdb的簡介 gdb是Linux下的 GUN調試程序,用來調試C/C++的強大調試器。 2.基本命令介紹 編譯文件的時候需要加上 -g加上 生成調試信息, 如 g++ -g -o test test.cpp list 查看源代
原创 epoll解析 -LT ET
I/O多路複用epoll函數 epoll是通過一組函數來完成多路複用的 其中epoll_create、epoll_ctl、epoll_wait函數,不懂的可以查閱資料! 這篇博客主要記錄 epoll的LT模式和ET模式的區別 LT模式
原创 Linux內存管理 一
1.Linux內核爲每個進程提供了一個獨立的虛擬地址空間,這個虛擬地址空間是連續的。 虛擬地址空間被分爲內核空間和用戶空間,在32位系統中,虛擬地址空間一共有4GB的大小。內核空間佔1G(位於最高處),用戶空間佔3G。 進程在用戶態時只
原创 leetcode---5
給定一個字符串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度爲 1000。 示例 1: 輸入: "babad" 輸出: "bab" 注意: "aba" 也是一個有效答案。 示例 2: 輸入: "cbbd"
原创 Linux下的內存分配
1.夥伴算法 一種物理內存分配和回收的方法,物理內存所有空閒頁都記錄在BUDDY鏈表中。首選,系統建立一個鏈表,鏈表中的每個元素代表一類大小的物理內存,分別爲2的0次方、1次方、2次方,個頁大小,對應4K、8K、16K的內存,沒一類大小的
原创 同步、異步、阻塞、非阻塞
阻塞I/O:執行的系統調用方法還沒有完成就被操作系統掛起(當前的條件不滿足時),直到等待的事件發生爲止。 非阻塞I/O:執行的系統調用總是立即返回,不會被操作系統掛起(不管條件是否滿足),時間到了,如果事件沒有立即發生,就會返回-1,在時
原创 Linux內存管理 二
內存的分配與回收 在程序中申請堆上的內存使用 malloc函數,在系統調用中可以調用 brk() 函數 和 mmap()函數 當申請的內存小於128kb(默認值) 的時候會調用brk()函數在heap上開闢內存, 當申請內存大於等於128
原创 Leetcode---136
給定一個非空整數數組,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素 示例 1:輸入: [2,2,1] 輸出: 1 示例 2:輸入: [4,1,2,1,2] 輸出: 4 說明
原创 Leetcode---181
給定一個包括 n 個整數的數組 nums 和 一個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。 例如,給定數組 nums = [-1,2,1,-
原创 智能指針 --- 一
C++中的智能指針是用來管理外界資源的,如在堆上邊new的資源,當程序還沒來得及執行delete操作,函數遇到異常了,沒有釋放資源,導致內存泄露 如下代碼: void fun() { A *ptr = new A();
原创 智能指針 --- 0
這篇文章不提任何的智能指針,看一段代碼、 示例一: #include <iostream> using namespace std; class test { public: test(){cout << "test()" <
原创 虛析構函數的深度解析
析構函數爲什麼要寫成虛函數,什麼情況下寫成虛函數,寫成虛函數解決了什麼問題, 解決問題的深層原理是什麼? 前邊都是表層,最後一個問題也困擾我了好一陣.. // Created by yanpan on 2019/5/10. #inclu
原创 智能指針 --- 實現
智能指針的功能前邊文章已經介紹了 接來下來實現一遍智能指針 註釋稍後在加 // // Created by yanpan on 2019/5/9. // /*智能指針的實現*/ #if 1 #include <iostr