原创 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