C++的Class中的一些重點整理| Jason note

文章推薦指數: 80 %
投票人數:10人

18.6. 如何判斷C++ 物件的類別? ... 18.24. 為何Google 禁止工程師使用C++ static object? 18.25. 是否能讓C++ template 的標頭檔只含宣告不含實作? JasonNote 1. Command 1.1. 10條Linux 1.2. OpenChineseConvert開放中文轉換 1.3. CommandTips 1.4. UsefulLinuxCommands 1.5. Opencc使用 2. SharedLibraries 2.1. SharedLibrariesSetup 3. LinuxTools 3.1. LinuxBasic 3.1.1. 學會使用命令幫助 3.1.2. 文件及目錄管理 3.1.3. 文本處理 3.1.4. 磁盤管理 3.1.5. 進程管理工具 3.1.6. 性能監控 3.1.7. 網絡工具 3.1.8. 用戶管理工具 3.1.9. 系統管理及IPC資源管理 3.2. Linux工具進階 3.2.1. 程序構建 3.2.2. 程序調試 3.2.3. 性能優化 3.3. 工具參考篇 3.3.1. gdb調試利器 3.3.2. ldd查看程序依賴庫 3.3.3. lsof一切皆文件 3.3.4. ps進程查看器 3.3.5. pstack跟蹤進程棧 3.3.6. strace跟蹤進程中的系統調用 3.3.7. ipcs查詢進程間通信狀態 3.3.8. toplinux下的任務管理器 3.3.9. free查詢可用內存 3.3.10. vmstat監視內存使用情況 3.3.11. iostat監視I/O子系統 3.3.12. sar找出系統瓶頸的利器 3.3.13. readelfelf文件格式分析 3.3.14. objdump二進制文件分析 3.3.15. nm目標文件格式分析 3.3.16. size查看程序內存映像大小 3.3.17. wget文件下載 3.3.18. scp跨機遠程拷貝 3.3.19. crontab定時任務 3.3.20. trace-cmd 3.4. Doxygen 3.5. Jdbshell 3.6. 二進位實用程式(objdump,readelf,ar,nm等) 3.7. UNIX下繪圖面面觀 3.8. performance分析 3.8.1. Application效能分析有妙招—使用perf走天下 3.8.2. 藉助PERF工具分析CPU使用率 3.8.3. linux下的內核測試工具——perf使用簡介 3.8.4. Perf--Linux下的系統性能調優工具,第1部分 3.8.5. Perf--Linux下的系統性能調優工具,第2部分 3.8.6. 系統級性能分析工具—Perf 3.8.7. perf性能分析實例——使用perf優化cache利用率 3.8.8. Linux效能分析工具:Perf-NCKU2015 3.8.9. Linux效能分析工具:Perf-NCKU2016 3.9. Mountingsambasharesfromaunixclient 3.10. cppcheck靜態程式分析工具 3.11. perf原理和實務 3.12. gnuplot語法解說和示範 3.13. 運用gprof+graphviz學習OpenSource 3.14. 有病治病,沒病強身:Cppcheck+Valgrind 4. Androidnote 4.1. androidresource 4.2. Androiddebug技巧 4.2.1. Android下打印調試堆棧方法 4.2.2. Android調試技巧(一) 4.2.3. 理解AndroidCrash處理流程 4.2.4. 理解NativeCrash處理流程 4.2.5. Native進程之Trace原理 4.2.6. debuggerd守護進程 4.3. GDB在線調試AndroidFrameworkNativeC/C++代碼 4.4. 什麼時候用startService,什麼時候用bindService 4.5. android的消息處理機制(圖+源碼分析)——Looper,Handler,Message 4.6. Android中HandlerRunnable與Thread的區別詳解 4.7. AndroidService與NativeService 4.8. Handler,Message,Looper,MessageQueue 4.9. Android各層中日誌打印功能的應用 4.10. Android指令和命令參數 4.11. Android中進程與進程、線程與線程之間如何通信 4.12. startService的創建過程 4.13. service組件-bindService源碼分析 4.14. [轉]Android執行緒-Thread與Handler 4.15. [轉]Android執行緒-Runnable與Handler 4.16. [轉]Android非同步任務-AsyncTask 4.17. [轉]Android.mk組織結構 4.18. 如何下載編譯Androidgoldfish(Kernel) 4.19. 自己動手編譯android源碼 4.20. Android核心使用kgdb 4.21. BusyBox安裝 4.22. Android常用開發工具 4.23. 開發最佳實踐 4.24. AnalyzingUIPerformancewithSystrace 4.25. Android常用指令 4.26. Android下設置CPU核心數和頻率 4.27. Android系統的智能指針(輕量級指針、強指針和弱指針)的實現原理分析 4.28. gradle教學 4.29. Gradle的一些總結 4.30. 線程通信基礎流程分析Handler、Looper、Message、MessageQueue 4.31. 多執行緒-Handler和Thread的關係(2) 4.32. jni 4.32.1. 使用JNI進行Java與C/C++語言混合編程 4.32.2. JNIJavanativeStruct 4.33. Android消息機制 4.33.1. 概述設計架構 4.33.2. Message和MessageQueue 4.33.3. Looper 4.33.4. Handler 4.34. 關於Service 4.34.1. Android之Service總結 4.34.2. startService及bindService的區別 4.34.3. androidservice之一(startservice) 4.34.4. androidservice之二(IntentService) 4.34.5. AndroidService之三(BindService,繼承自Binder類) 4.34.6. AndroidService之三(BindService,使用Messenger) 4.34.7. AndroidService之三(BindService,使用AIDL) 4.35. 關於Activity 4.35.1. Android之Activity總結 4.36. IPC 4.36.1. 進程通信之Messenger&AIDL使用詳解 4.36.2. 為什麼Android要採用Binder作為IPC機制? 4.37. Carson_Ho筆記 4.37.1. Android多線程全面解析:IntentService用法&源碼 4.37.2. Android四大組件:Service生命週期最全面解析 4.37.3. Android四大組件:Service服務史上最全面解析 4.37.4. (本地、可通信的、前臺、遠程)Service使用全面介紹 4.37.5. Android:遠程服務Service(含AIDL&IPC講解) 4.38. 反組譯apk 4.39. 如何使用篇 4.39.1. 如何瞭解Task、Thread、ThreadPool、Handler、Looper、Message、MessageQueue、AsyncTask 4.39.2. 如何使用Handler 4.39.3. 如何使用HandlerThread 4.39.4. 如何使用Thread和Handler 4.39.5. 如何使用Service 4.39.6. 如何使用IntentService 4.39.7. 如何使用AsyncTask 4.40. androidthread 4.40.1. Android多線程的四種方式 4.40.2. Android的幾種多線程方式(AsyncTask,HandlerThread,IntentService,ThreadPool),使用場景以及注意事項 4.40.3. Android多線程編程的總結 4.41. 簽署你的Android應用程式(.keystore) 4.42. BuildingAndordi&Kernels 4.43. Handler消息機制再梳理 4.44. 用Interface實作CallBack機制 4.45. EventBus套件的基本用法 5. Ubuntu 5.1. Ubuntuinstaller 5.2. Windows與Ubuntu雙系統,開機時偵測不到彼此的解決方法 5.3. sshtunnel 5.4. tmate-slave架設 6. QEMU 6.1. X86_QEMU 6.2. ARM_QEMU 6.3. Qemu_KGDB_Ftrace 6.4. 5分鐘Linux0.11快速構建實驗環境 6.5. DebugAssemblywithGDBforARMv8onQEMU 6.6. ARM體系結構--寄存器 6.7. RunDebianisoonQEMUARMv8 6.8. QEMUARM64guide 6.9. QEMUinstall 6.10. 編譯linux0.11,並且使用QEMU+GDB調試kernel(Ubuntu11.04,GCC4.5.2) 6.11. HowtoBuildACustomLinuxKernelForQemu(2015Edition) 6.12. X86Kernel 6.13. FreeNOS 6.14. 建構Linux0.11的開發環境 6.15. KGDB+QEMU+SSH 6.16. 打造屬於自己的linux發行版 6.17. 編譯內核+BusyBox定製一個Linux提供ssh和web服務 6.18. 用Qemu模擬ARM 6.19. qemu-arm快速驗證arm應用程式 6.20. HowOtherPeopleUseQEMU 6.21. buildroot&dropbear 6.22. ARM64Linuxkernel+busyboxrootFSviaNFSoverQEMUwithGDB 6.23. 奔跑吧-linux內核-qemu調試內核 6.24. Linuxkernelv4.0codefor 6.25. 奔跑linuxkernelGDB使用 6.26. QEMU运行LinuxKernel环境配置 6.27. 基于QEMU的LinuxDriver开发环境的配置 6.28. Myrunninglinuxkernel_5.0 7. fcamel 7.1. [轉]ld,ld.so和ldconfig的行為 7.2. [轉]解決undefinedsymbol/reference 7.3. [轉]列出用到的sharedlibrary 7.4. [轉]用LD_PRELOAD替換動態連結的函式庫 7.5. [轉]用strace和ltrace找出用到的systemcall和librarycall 7.6. [轉]加速linkingtime 7.7. [轉]從C呼叫C++函式的過程理解程式編譯、連結的原理 7.8. [轉]對C++的觀感 7.9. [轉]在Linux下開發C/C++的新手指南 7.10. [轉]瞭解C/C++程式行為的技巧 7.10.1. 查C/C++symbol定義的方法 7.10.2. 閱讀C/C++原始碼的好幫手 7.10.3. 配合c++filt讀程式 7.10.4. 加速gdb載入symbol時間 7.10.5. 在x86-64上對systemcall使用conditionalbreak 7.10.6. 用strace找出Ubuntu如何提示未安裝的指令 7.10.7. 自行編譯含debugsymbol的套件(package) 7.10.8. gdb顯示STLcontainer的方法 7.10.9. 善用strace、debugger從執行期間找出問題根源 7.10.10. 用pythongdb客製化backtrace的結果 7.11. 寫linuxdaemon的注意事項 7.12. signal小知識 7.13. gold和GNUld行為差異造成的問題 7.14. 如何在Linux上使用自行編譯的第三方函式庫 7.15. 在Ubuntu上找出第三方函式庫的程式碼 8. ARM 8.1. ARM彙編語言 8.2. ARM尋址方式 8.3. IntroductiontoARMv864-bitArchitecture 8.4. ARM彙編指令調試方法 9. ARMemulation 9.1. CompilingLinuxkernelforQEMUARMemulator 9.2. CompilingLinuxkernel3.0withEmdebianARMtoolchain 9.3. CompileLinuxkernel3.2forARMandemulatewithQEMU 9.4. BusyboxforARMonQEMU 9.5. LinuxNFSRootunderQEMUARMemulator 9.6. TryingDebianforARMonQEMU 9.7. DebuggingARMprogramsinsideQEMU 9.8. U-bootforARMonQEMU 9.9. BootingLinuxwithU-BootonQEMUARM 9.10. SimplestbaremetalprogramforARM 9.11. HelloworldforbaremetalARMusingQEMU 9.12. EmulatingARMPL011serialports 9.13. ARM926interruptsinQEMU 9.14. UsingUbuntuARMcross-compilerforbaremetalprogramming 9.15. UsingNewlibinARMbaremetalprograms 9.16. UsingCodeSourcerybaremetaltoolchainforCortex-M3 9.17. QEMUARMsemihosting 9.18. SimulatingAT91withSkyeye 10. LinuxKernel 10.1. MY_example 10.1.1. sendpidtokernelbyioctlandkernelsend_sigtouserspace 10.2. LKD 10.2.1. 核心簡介 10.2.2. 核心開發準備 10.2.3. Linux行程 10.2.4. 行程排程 10.2.5. 系統呼叫 10.3. 我理解的邏輯地址、線性地址、物理地址和虛擬地址 10.4. 用ttyS0獲取dmesg信息 10.5. BuddyAlgorithm 10.6. 分析oops的機器碼 10.7. oops調試 10.8. 可搶佔 10.9. 異或的用法 10.10. 定製編譯內核模塊的GCC參數 10.11. Linux記憶體基礎 10.12. Linux內存管理之分頁機制 10.13. Linux虛擬內存概述 10.14. 程序的裝載和鏈接 10.15. IA32CPU內存管理機制 10.16. Linux內存管理之分段機制 10.17. 邏輯地址,線性地址及物理地址的區別 10.18. 分段機制和分頁機制 10.19. 段選擇器段描述符段描述符表線性地址形成 10.20. Linux內核的編譯系統 10.21. 如何編譯linuxkernel 10.22. LinkedListinLinuxKernel 10.23. LinuxKernel:強大又好用的list_head結構 10.24. sendsignaltouser-space 10.25. kernel發signal通知pidtask_struct->comm 10.26. Linux內核調試方法gdbocgdboeJTAG 10.27. Linux內核kernelpanic機制淺析 10.28. 如何在linuxkernel中加入systemcall 10.29. 查看Linux內核編譯配置 10.30. Ubuntu更換內核方法 10.31. 調試工具ltracestraceftrace的使用 10.32. 根據內核Oops定位代碼 10.33. 內核和用戶空間共享內存的實現例程-proc和mmap 10.34. 陳鍾誠LinuxKernel 10.34.1. 簡介 10.34.2. 行程結構 10.34.3. Linux的記憶體管理 10.34.4. Linux的檔案系統 10.34.5. Linux的輸出入系統 10.34.6. Linux的目的檔 10.34.7. Linux的動態連結與載入(DynamicLinking) 10.35. 例說linux內核與應用數據通信系列 10.35.1. (一):添加一個系統調用 10.35.2. (二):proc虛擬文件系統 10.35.3. (三):讀寫內核設備驅動文件 10.35.4. (四):映射設備內核空間到用戶態 10.36. 把握linux內核設計思想系列 10.36.1. (一):系統調用 10.36.2. (二):硬中斷及中斷處理 10.36.3. (三):下半部機制之軟中斷 10.36.4. (四):下半部機制之tasklet 10.36.5. (五):下半部機制之工作隊列及幾種機制的選擇 10.36.6. (六):內核時鐘中斷 10.36.7. (七):內核定時器和定時執行 10.36.8. (八):進程管理分析 10.36.9. (九):進程調度 10.36.10. (十):內核同步 10.36.11. (十一):內存管理之頁的分配與回收 10.37. 移植LinuxKernel造成無法開機之解決方案以及除錯工具 10.38. delay/sleep延遲函式學習筆記 10.39. 密碼學演算法實作流程 10.40. 效能工具–perf來分析探討硬體加密之瓶頸 10.41. Linuxkernel調試打log流和斷點流 10.42. Linuxkernelv4.0codefor 10.43. TraceKernel程式的一些小技巧 10.44. ModernMaker:從那些Maker的大小事看Linux核心系列 10.44.1. Day2:「我需要perf!」「請給我eBPF!」 10.44.2. Day3:安裝ply和perf 10.44.3. Day4:小試身手--是誰住在Rpi的LED裡? 10.44.4. Day5:ply語法簡介 10.44.5. Day6:I2C(Part1)-簡介與環境設置 10.44.6. Day7:I2C(Part2)-ftrace爽颯登場! 10.44.7. Day8:DeviceTree(Part1) 10.44.8. Day9:暖身運動-媽!我在核心裡面了!第一個核心模組 10.44.9. Day10:I2CDriver(Part1)-使用DeviceTree來找Driver 10.44.10. Day11:I2CDriver(Part2)-這是一個間諜檔案!把I2C的傳輸包成字元驅動程式 10.44.11. Day12:I2CDriver(Part2)-細節、追蹤與驗證 10.44.12. Day13:SPI(Part1)-原來是ShiftRegister啊!我還以為是SPI呢! 10.44.13. Day14:SPI(Part2)-ftrace啦!哪次不ftrace? 10.44.14. Day15:SPIDriver(Part1)-DTOverlay 10.44.15. Day16:SPIDriver(Part2)-傳簡單的訊息! 10.44.16. Day17:SPIDriver(Part3)--又是一個間諜檔案! 10.44.17. Day18:spidev-辣個userspace的驅動程式 10.44.18. Day19:GPIO(Part1)--人生的謊言:GPIO很簡單 10.44.19. Day20:GPIO(Part2)-沒有用到GPIO子系統的GPIO 10.44.20. Day21:GPIO(Part3)-所以我說那個裝置樹呢? 10.44.21. Day22:GPIO(Part4)-今晚,我想來點驅動程式佐GPIO 10.44.22. Day23:IIO(Part1)-構造改革!自動幫感測器做好介面的子系統! 10.44.23. Day24:IIO(Part2)-基本術語與架構 10.44.24. Day25:IIO(Part3)-變數命名大師?第一個IIO驅動程式! 10.44.25. Day26:IIO(Part4)-幫感應器寫驅動程式!以TCRC5000為例 10.44.26. Day27:IRQ(Part1)-斷開魂結! 10.44.27. Day28:IRQ(Part2)-中斷突進!簡單的IRQ程式 10.44.28. Day29:IRQ(Part3)-這是核心執行緒的味道!ThreadedIRQ 10.44.29. Day30:賽後感言 10.45. EmbeddedLinuxPrimer讀書筆記 10.45.1. Chapter2:TheBigPicture 10.45.2. Chapter4:淺談Linux核心 10.45.3. Chapter5:KernelInitialization 10.45.4. Chapter6:UserSpaceInitialization 10.45.5. Chapter8:裝置驅動程式的基本知識 10.45.6. Chapter9:Filesystem 11. LinuxDriver 11.1. LinuxDeviceDriverProgramming 11.1.1. Linux裝置驅動程式的概要 11.1.2. Linux的授權 11.1.3. 準備開發裝置驅動程式 11.1.4. 開發驅動程式的第一步 11.1.5. 開發driver需要的基礎知識 11.1.6. 實際撰寫驅動程式 11.1.7. 控制硬體 11.1.8. 記憶體 11.1.9. 計時器 11.1.10. 同步與鎖定 11.1.11. 中斷 11.1.12. 測試與除錯 11.2. 《深入Linux設備驅動程序內核機制》之MMAP內存頁面示例 11.3. LinuxDeviceModel三角關係 11.4. Linux設備模型(1)_基本概念 11.5. Linux設備模型(2)_Kobject 11.6. mmapdriverimplementation 11.7. 嵌入式Linux驅動模板精講與項目實踐 11.8. 動手寫LinuxDriver 12. OS 12.1. [轉]打造簡易作業系統 12.1.1. (一)開機HelloWorld實例 12.1.2. (二)BootLoader+作業系統載入實例(QEMU) 12.1.3. (三)BootLoader+作業系統載入實例(CFCard) 12.1.4. (四)由16位元真實模式(RealMode)進入32位元保護模式(ProtectMode) 12.1.5. (五)使用LocalDescriptorTable(LDT) 12.1.6. (六)簡介CallGate 12.1.7. (七)利用CallGate與TSS(Task-StateSegment)實現特權等級的轉換 12.2. PageTablesize太大之解決 13. LinuxSystem 13.1. 事件驅動伺服器 13.2. Multi-pthreadnote 13.2.1. fork+pthread_create記憶體空間差異 13.2.2. ProsandCons 13.2.3. Linux內核中線程的實現方式 13.3. linux系統編程 13.3.1. 文件與IO(一):文件描述符、open,close 13.3.2. 文件與IO(二):系統調用read和write 13.3.3. 文件與IO(三):利用lseek()創建空洞文件 13.3.4. 文件與IO(四):目錄訪問相關係統調用 13.3.5. 文件與IO(五):stat()系統調用獲取文件信息 13.3.6. 文件與IO(六):實現ls-l功能 13.3.7. 文件與IO(七):時間函數小結 13.3.8. 文件與IO(八):文件描述符相關操作-dup,dup2,fcntl 13.3.9. 進程(一):進程與程序 13.3.10. 進程(二):進程生命週期與PCB(進程控制塊) 13.3.11. 進程(三):進程複製fork,孤兒進程,殭屍進程 13.3.12. 進程(四):進程退出exit,_exit區別即atexit函數 13.3.13. 進程(五):exec系列函數(execl,execlp,execle,execv,execvp)使用 13.3.14. 進程(六):父進程查詢子進程的退出,wait,waitpid 13.3.15. 進程(七):system()函數使用 13.3.16. 進程(八):守護進程詳解及創建,daemon()使用 13.3.17. 信號(一):中斷與信號 13.3.18. 信號(二):信號處理流程(產生、註冊、註銷、執行) 13.3.19. 信號(三):信號安裝、signal、kill,arise講解 13.3.20. 信號(四):alarm和可重入函數 13.3.21. 信號(五):信號集操作函數,信號阻塞與未決 13.3.22. 信號(六):信號發送函數sigqueue和信號安裝函數sigaction 13.3.23. 信號(七):被信號中斷的系統調用和庫函數處理方式 13.3.24. 信號(八):三種時間結構及定時器setitimer()詳解 13.3.25. 管道(一):匿名管道(pipe) 13.3.26. 管道(二):管道讀寫規則 13.3.27. 管道(三):命令管道(FIFO) 13.3.28. 錯誤處理:perror,strerror和errno 13.3.29. 利用backtrace和backtrace_symbols函數打印調用棧信息 13.3.30. linux系統編程:setjmp和longjmp函數用法 13.3.31. linux新定時器:timefd及相關操作函數 13.4. Note 13.4.1. IPC 13.4.1.1. PIPE 13.4.1.2. Signal 13.5. LinuxDebugging 13.5.1. 使用反彙編理解C++程序函數調用棧 13.5.2. 熟悉AT&T彙編語言 13.5.3. C++函數調用的參數傳遞方法總結(通過gdb+反彙編) 13.5.4. 使用GDB來理解C++對象的內存佈局(多重繼承,虛繼承) 13.5.5. coredump分析入門 13.5.6. 動態庫注入、ltrace、strace、Valgrind 13.5.7. 使用反彙編理解動態庫函數調用方式GOT/PLT 13.5.8. core真的那麼難以追蹤嗎? 13.5.9. 一次生產環境下的“內存洩露” 13.6. Linux作業系統分析 13.6.1. 破解Linux操作系統的奧祕 13.6.2. Howprogramworks 13.6.3. 進程的創建與可執行程序的加載 13.6.4. 內核裝載ELF的過程總結 13.7. 如何更新linuxconsole畫面 13.8. 服務器進程為何通常fork()兩次 13.9. 創建Daemon程式 13.10. Linux信號處理機制 13.11. 函數調用棧的獲取原理分析 13.12. 在Linux程序中輸出函數調用棧 13.13. C/C++混合編程 13.14. linux下C與C++混合編程 13.15. Static與Shared的函式庫撰寫 13.16. Linux的time指令 13.17. 孤兒進程與殭屍進程[總結] 13.18. pkg-config使用及建立方法 13.19. 簡述configure、pkg-config、pkg_config_path三者的關係 13.20. 動態庫的鏈接和鏈接選項-L,-rpath-link,-rpath 13.21. LD_LIBRARY_PATH與-L的關係 13.22. shell環境變量以及set,env,export的區別 13.23. 用gcc自製Library 13.24. 如何使用pkg-config工具編譯鏈接第三方庫 13.25. stdout&stderr&fflush() 13.26. 使用system()函數執行命令行命令簡述 13.27. ldconfig及LD_LIBRARY_PATH,LD_DEBUG,LD_PRELOAD 13.28. SIGINT後KILL自己 13.29. my_note 13.29.1. thread_create&signal使用技巧 13.30. pthread_sigmask控制線程的信號掩碼 13.31. C的ThreadPool筆記 13.32. IPaddressesfromaCprogram 13.33. OpenMPinlinux 13.34. MutexesVSSemaphores大揭祕 13.35. dlopen&dlsym用法 13.36. pthread_create&pthread_join&pthread_exit基本用法 13.37. LINUX下動態庫調用靜態庫的方法 13.38. C語言互斥鎖-雙條件變量實現循環打印 13.39. tutorial-pthreads 13.40. 《ProgrammingwithPOSIXThreads》筆記 13.41. mmap映射空間與內存和磁盤的IO性能對比 13.42. 一個並發10k的簡易群聊天室(使用epoll) 13.43. Mutex與Semaphore最大的差異是 13.44. [讀書會]Linux環境編程:從應用到內核 13.45. example 13.46. 64位x86的函數調用棧佈局 13.47. 如何手工展開函數棧來定位問題 13.48. 第3章行程(process)環境 13.49. 打印出一個完整的程序調用堆棧信息 13.50. Linux下IPC的運作方式 13.51. 細說linuxIPC 13.51.1. 基於socket的進程間通信(上) 13.51.2. 基於socket的進程間通信(下) 13.51.3. mmap系統調用共享內存 13.51.4. posix共享內存 13.51.5. systemV共享內存 13.51.6. pipe和FIFO 13.51.7. 信號(上) 13.51.8. 信號(下) 13.51.9. posix消息隊列 13.51.10. systemV消息隊列 13.51.11. 細說linuxIPC:各種IPC形式比較總結 13.51.12. 補充現代Linux有兩種共享內存機制 13.52. Linux同步與互斥應用 13.52.1. (零):基礎概念 13.52.2. (一):posix線程及線程間互斥 13.52.3. (二):posix線程同步 13.52.4. (三):posix線程實現單個生產者和單個消費者模型 13.52.5. (四):posix信號量的互斥與同步 13.52.6. (五):systemV信號量的互斥與同步 13.52.7. (六):文件鎖 13.53. Linux下利用backtrace追蹤函數調用堆棧以及定位段錯誤 13.54. sendfile:Linux中的"零拷貝" 13.55. LinuxNote:daemon與backgroundprocess的差異 13.56. x86有個有個lea指令(LoadEffectiveAddress) 13.57. Linux平臺延時之sleep、usleep、nanosleep、select比較 13.58. linux用戶空間和內核空間延時函數 13.59. 即時系統使用排程器 13.60. 性能分析工具使用callgrind+kcachegrind 13.60.1.2(RDTSC) 13.61. linux編程的108種奇淫巧計 13.61.1. 1(FALSESHARING) 13.61.2. 2(RDTSC) 13.61.3. 3(magic2) 13.61.4. 4(編譯展開) 13.61.5. 5(rbp寄存器) 13.61.6. 6(shellcode) 13.61.7. 7(Lock-free實驗) 13.61.8. 8(嵌入彙編的另一種寫法) 13.61.9. PForDelta索引壓縮算法的實現 13.61.10. 11(亂序) 13.61.11. 12(存儲計算) 13.61.12. 15(減少複製) 13.61.13. 16(如何達到內存最大帶寬,複雜指令) 13.61.14. 17(如何達到內存最大帶寬,精簡指令,預取和NT) 13.61.15. 18(SIMD) 13.61.16. 關於bit操作(bit_settest_bit) 13.61.17. putvariablesinaregsiter 13.61.18. UserspaceI/Oschedulingformulti-fileoperations 13.61.19. ManualFIleLocking 13.62. Linux下fork函數及pthread函數的總結 13.63. C++在類裡面使用多線程技術 13.64. 深入Linux多線程編程 13.65. C/C++每線程(thread-local)變量的使用 13.66. 在pthread的線程函數中,使用類的非靜態成員函數來執行 13.67. 從pthread轉換到std::thread 13.68. 如何在運行時加載C++函數和類別 13.69. 主線程退出對子線程的影響 14. Assembly 14.1. myAssembly 14.2. Linux平臺學X86組合語言 14.2.1. 現代計算機結構組成與工作過程 14.2.2. 處理器指令碼及IA-32平臺瞭解 14.2.3. 相關開發工具 14.2.4. 從“helloworld!”開始 14.2.5. 使用gdb調試彙編程序 14.2.6. 數據的傳送 14.2.7. 堆棧的使用 14.2.8. 條件跳轉 14.2.9. 循環指令 14.2.10. 整數運算 14.2.11. 字符串的傳送 14.2.12. 字符串的存儲與加載 14.2.13. 字符串的比較與搜索 14.2.14. 函數的使用 14.2.15. 使用命令行參數 14.2.16. 在彙編語言中調用C庫函數 14.2.17. 在彙編中使用linux系統調用 14.2.18. 內聯彙編 14.2.19. C語言中調用匯編函數 14.2.20. 彙編庫的使用(結) 14.3. [轉]如何在Linux下使用GNUAS撰寫組合語言 14.4. 在Linux下使用GNUAS編寫組合語言-使用gdb進行除錯 14.5. linux反彙編旁門左道小技巧一則 14.6. gas學習byJianLee 14.7. 閱讀assemblycode 14.8. Linuxasm系統調用:32位和64位的區別 14.9. 如何在linux下編譯彙編程序,內功心法是彙編程序的結構 15. Toolchain 15.1. crosscompilerinstall 15.2. buildrootinstall 15.3. arm交叉編譯器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi區別 16. GDB 16.1. gdb常用指令 16.2. Beej'sQuickGuidetoGDB 16.3. 簡易GDBScript教學,應用 16.4. [轉]GDB的妙用 16.5. GDB中應該知道的幾個調試方法 16.6. KGDB 16.7. [轉]DebugXorgwithGDBonUbuntu 16.8. [轉]使用GDB以樹狀方式將函式流程印出 16.9. gdb除錯技術 16.10. gdb的multiarch 16.11. gdb編譯 16.12. KGDBLinuxKernelforSamsung 16.13. 用GDB追蹤glibc代碼執行過程 16.14. 使用GDB分析二進位資料 16.15. cgdb編譯&使用 16.16. gdbC++小技巧 16.17. gdb展開C/C++的macro 16.18. solib-absolute-prefix和solib-search-path的區別 16.19. 利用gdb進行sharedlibrary的除錯 16.20. 用GDB跟蹤觀察共享庫函數的地址翻譯過程 16.21. KGDB調試LINUX內核 16.22. GDB調試原理ptrace系統調用 16.23. gdb遠程qemu-arm調試 16.24. gdb顯示結構體 16.25. GDBC++STLprinter 16.26. GDBdashboard:debuginfoataglance 16.27. 在程式碼中使用signal()插入中斷點,讓GDB暫停程式做debugging 16.28. 只要出問題,C4炸藥gdb都能搞定 16.29. 懶人除錯法 16.30. 兩種將gdb的輸出信息存到文件的方法 16.31. 使用call命令在GDB中重複調用某函數 16.32. 通過GDB學習C語言 16.33. 用GDB反彙編調試linux內核 16.34. GDB下查看記憶體指令(x指令) 16.35. Howtodebugglibsourcecodeviagdb 16.36. HowtouseGDBdebugOpenCVprogrammes? 16.37. GDB實用教學:自動化你的debug 16.38. GDB反向調試(ReverseDebugging) 16.39. 讓程序崩潰時產生coredump 16.40. 很經典的GDB調試命令,包括查看變量,查看內存 16.41. gdb調試帶參數程序 16.42. 整理常用的gdb技巧 16.43. GDB命令基礎,讓你的程序bug無處躲藏 16.44. valgrind+gdb 16.45. 調試技巧備忘 16.46. TraceFunctionCallsUsingGDBRevisited 16.47. [GDB]除錯python程式thread間互相等待mutex,造成deadlock的問題 17. Linux內核分析雲課堂學習筆記 17.1. 圖解分析彙編代碼以理解計算機是如何工作的 17.2. 基於mykernel的一個簡單的時間片輪轉多道程序內核代碼分析 17.3. 使用gdb跟蹤Linux內核啟動過程 17.4. 使用庫函數API和C代碼中嵌入彙編代碼兩種方式使用同一個系統調用 17.5. 分析system_call中斷處裡過程 17.6. 初學Linux進程的描述和進程的創建 17.7. 初學《Linux內核如何裝載和啟動一個可執行程序》 17.8. 初學Linux中進程調度與進程切換過程 17.9. Linux內核學習總結 17.10. 小博魚筆記 17.10.1. Linux內和分析(一)計算機是如何工作的 17.10.2. Linux內和分析(二)操作系統是如何工作的 18. C++ 18.1. 筆記 18.1.1. C++通過虛函數表,直接外部訪問類中的函數,並且脫離類 18.1.2. 使用gdb探究C++內存佈局 18.1.3. C++動多態實現之虛函數與虛表指針 18.2. [轉]C++對象的內存佈局 18.3. [轉]C++對象模型之簡述C++對象的內存佈局 18.4. [轉]C++對象模型之詳述C++對象的內存佈局 18.5. [轉]C++虛函數表解析 18.6. 如何判斷C++物件的類別? 18.7. ASimpleC++FunctionCallStackTraceUtility 18.8. 探索C++虛函數在g++中的實現 18.9. 樸實的C++設計 18.10. C++智能指針 18.11. Mutex::Autolockforc++ 18.12. C++STL學習總結(全面) 18.13. 學習C++:實踐者的方法(Beta1) 18.14. STL容器(一)-基本介紹 18.15. STL容器(二)-Iterator 18.16. C/C++十三誡 18.17. 標準類型轉換:static_cast,dynamic_cast,reinterpret_cast,andconst_cast 18.18. example 18.18.1. vector用法 18.18.2. 父子類別之間函數呼叫 18.18.3. C++:父類調用子類的成員函數 18.18.4. StdPair用法 18.18.5. 2Dvectorarrayusingstd::vector 18.18.6. arraycopyusingstd::vector 18.18.7. std::vector封裝到shared_ptr 18.18.8. shared_ptr向下轉型 18.19. C++的Class中的一些重點整理 18.20. LOG建構解構 18.21. c++typeid()用法如何正確的顯示變數型態名稱的亂碼、異常 18.22. shared_ptr使用建構解構驗證記憶體回收 18.23. 實例研討:從C++學習C高級技巧 18.24. 為何Google禁止工程師使用C++staticobject? 18.25. 是否能讓C++template的標頭檔只含宣告不含實作? 18.26. 改善C++程序的150個建議 18.27. C++物件模型 18.27.1. 物件模式(一) 18.27.2. 物件模式(二) 18.28. C++類對象內存結構 18.29. C++四種繼承關係中內存分佈 18.30. GDB來理解C++對象的內存佈局 18.31. 利用函數指針實現父類函數調用子類函數 18.32. c++子類和父類指針的轉換 18.33. C中調用C++與C++調用C 18.34. C++11之多線程 18.34.1. (一、標準庫的線程封裝類Thread和Future) 18.34.2. (二、互斥對象和鎖) 18.34.3. (三、條件變量) 18.35. mutex 18.35.1. C++11併發之std::mutex 18.35.2. timed_mutex例子 18.36. C++靜態成員函數訪問非靜態成員的幾種方法 18.37. Mutex+Timer模擬時間鎖 18.38. HowtoStoporTerminateaThread 18.39. C++11threadrun函數不需要static 18.40. templatec++toallocatedynamicmatrix2D 19. GNUmake 19.1. example 19.1.1. 好用Makefile 19.2. CMake 19.2.1. CMake初探 19.2.2. CMake入門 19.2.3. 讓cmake顯示gcc/g++的編譯信息 19.2.4. 把玩CMake的第一步 19.2.5. cmakeCFLAGSCXXFLAGS 19.2.6. CMake入門/加入編譯選項 19.2.7. CMakeforwindows 19.2.8. CMake常用指令 19.3. 如何調試makefile變量 19.4. 跟我一起寫Makefile:make運行 19.5. Makefile的常用技術總結 19.6. Makefile語法簡介 19.7. Makefile先編譯出so後在編譯出執行檔 19.8. 利用Autotools來建立Makefile檔案 19.9. GNUMakefile雜項語法備忘 19.10. SCons筆記(詳細版) 19.11. 高級Makefile技巧 19.12. Makefile條件編譯debug版和release版 19.13. Makefile範例教學 19.14. LinuxC++編譯及靜態/動態鏈接庫筆記 19.15. Makefile的基本結構 19.16. 深入學習Make命令和Makefile(上) 19.17. 深入學習Make命令和Makefile(下) 19.18. Makefile中的$@,$^,$與設計模式之開放封閉原則OCPC++示例 25.9. c++面向對象設計的SOLID原則 26. OpenWrt 26.1. OpenWRT編譯環境搭建 27. Python 27.1. example 27.1.1. 月營收這樣看!三種月營收選股法–Python實作教學 27.1.2. 個股年成交資訊 27.1.3. Python基本爬蟲程式以Google新聞為例 27.1.4. Python新聞關鍵字查詢 27.1.5. PTTcrawler(PTT文章爬蟲) 27.1.6. Python_by_David_Chiu 27.1.7. googlenews爬文 27.1.8. 如何抓取廉價航空的機票價格–以酷航 27.1.9. 露天拍賣&編碼問題 27.1.10. fb社團爬標題發文者內容 27.1.11. Python中將打印輸出導向檔案 27.1.12. 轉換GDB調用棧到流程圖 27.1.13. RetrievingGmailblockedattachments 27.1.14. 如何抓取上市股票交易明細 27.1.15. 臺鐵資料下載 27.1.16. Findallfilesindirectorywithextension.txtinPython 27.1.17. Audio利用ffmpeg編碼轉換 27.1.18. 集臺證所融資融券餘額全部資料 27.1.19. goodinfo 27.1.20. sqlite3技術手冊 27.1.21. 利用PYTHON+GMAILSMTP寄送EMAIL及附檔CATEGORIES 27.1.22. Post抓取高鐵 27.1.23. goodinfo經營績效 27.1.24. 使用Pandas函式將臺灣銀行的牌告匯率存進資料庫中 27.1.25. 抓三大法人的網頁資料 27.1.26. 讀取檔案指定的行 27.1.27. 產生曲線圖 27.1.28. 畫出Eulerangle曲線圖 27.1.29. 標準差計算 27.1.30. 畫四元數曲線圖 27.1.31. 多筆行平均總和 27.1.32. SWIG 27.1.33. Scrapy+Python3:PTT資料抓取與分析 27.1.34. pttusingselenium 27.1.35. Linenotify 27.1.36. PTT爬文物品+line發送 27.1.37. 露天拍賣換頁 27.1.38. ultrasoundrawdata 27.1.39. campsaver.py 27.1.40. 選出股本50億以上的股票代號 27.1.41. goodinfo股票篩選 27.1.42. 抓取臺股證交所每日股價資料,儲存到MongoDB 27.1.43. 音頻文件按照正常語句,斷句拆分的處理方法 27.1.44. 台股大盤季線計算 27.2. pandas 27.2.1. pandas入門 27.2.2. PythonPandasDataFrame的iloc[0]與iloc[[0]] 27.2.3. PandasDataframesto_html:Highlightingtablerows 27.2.4. openHTML網頁分析 27.2.5. Pandas無法處理HTML透過Soup輔助 27.2.6. pandascreatedataframeexample 27.2.7. Convertlistofnumpy.float64tofloatandConvertingstringstofloatsinaDataFrame 27.2.8. PandasExcelexample 27.2.9. 十分鐘快速入門Pandas 27.2.10. Addarowtodataframe 27.2.11. PandasDataFrame的iloc[0]與iloc[[0]] 27.2.12. 數據操作(Pandas)完整 27.2.13. pandasreadcsv 27.2.14. readhtml 27.3. 編碼 27.3.1. Python-瞭解bytes、str與unicode的區別 27.3.2. 淺談python2及python3處理中文字串編碼的差異 27.3.3. 立即停止使用setdefaultencoding('utf-8'),以及為什麼 27.3.4. Python+Requests編碼問題 27.3.5. Python的編碼 27.3.6. 瞭解Unicode 27.3.7. pythonstringandunicodestring 27.3.8. python2與python3編碼差異 27.4. django 27.4.1. 使用heroku部署django應用測試 27.4.2. PythonDjango快速入門教學 27.4.3. Django基本命令 27.5. 正則Regex 27.5.1.Python的re模塊 27.6. BeautifulSoup 27.6.1. removescripttagswithBeautifulSoup 27.6.2. 使用BeautifulSoup 27.6.3. Python使用beautifulsoup解析HTML、XML 27.6.4. python爬蟲之BeautifulSoup 27.7. 爬蟲 27.7.1. Python爬蟲模擬登錄的黑魔法 27.7.2. Selenium使用CSSlocator定位HTMLelement 27.8. 常見錯誤訊息 27.9. 安裝Jupyter 27.10. 編譯python&安裝pip 27.11. pip使用詳解 27.12. 5個很好的Python面試題 27.13. Python-網頁爬蟲-&-文本處理-&-科學計算-&-機器學習-&-數據挖掘兵器譜 27.14. 選擇Python科學計算發行版 27.15. Python常用的數學函數 27.16. pythondebug入門 27.17. Python直譯器如何處理字串編碼 27.18. Python--線性代數篇 27.19. python字符串連接的N種方式 27.20. Python調用Linux下的動態庫(so) 27.21. python堆棧回溯示例代碼 27.22. Generatec/c++headerfilefromaCSVfile(forarraydeclaration) 27.23. 觀察技巧withChrome開發人員工具 27.24. steepandcheapalerts 27.25. Anaconda使用總結 27.26. pythonsetup.pyuninstall 27.27. Python原始碼使用gdbtrace 27.28. DebuggingCPythonwithgdb 27.29. PTTgamesale板的買賣文 27.30. Howtodefinetwo-dimensionalarrayinpython 27.31. Python技巧(漂亮又通順的程式碼) 27.32. DB 27.32.1. SQLite-Python安裝 27.33. Python讀取csv的某行 27.34. 用Anaconda完美解決Python2和python3共存問題 27.35. Embedpython/numpyinC++ 27.36. practice 27.37. Selenium 27.38. utctimetolocaltime 27.39. 區塊鏈 27.39.1. 50行Python代碼構建一個區塊鏈 28. Vim 28.1. HOWTO-vi,vim 28.2. 編譯vim8並添加對lua,python,ruby的支持 28.3. NVIM 29. TDD 29.1. 程式設計師升級必練內功:TDDKata 30. Raspberry_Pi 30.1. 燒錄新版系統 30.2. HelloworldonqemuRaspberryPi 30.3. 自己動手編譯RaspberryPi的Kernel 30.4. BuildingandDeployingRaspberryPIKernel 30.5. PreparingRaspberryPIforJTAGDebugging 30.6. RaspberryPi2BareMetalMulticoreJTAGDebugging 30.7. rpi,serialandkgdb 30.8. [RaspberryPiProject]HowdoesRaspberryPiboot? 30.9. [RaspberryPiProject]CompileandupdateRaspbiankernel 30.10. [RaspberryPiProject]kernel啟動參數 30.11. RaspberryPi編譯Linux核心 30.12. 用Raspberrypi寫驅動程式--基本觀念 30.13. 用Raspberrypi寫驅動程式--範例1:LED 30.14. 在Raspberrypi上建立自己的systemcall 30.15. RaspberrypiGPIO控制 30.16. RaspberryPi的開始流程 30.17. consilefullscreen 30.18. RaspberryPi:Raspbian增加deb套件的下載來源 30.19. 使用C++讀取MPU-6050加速度計與陀螺儀感測資料 30.20. 使用MPU-6050的DMP來取得更精準的運動感測資料 30.21. kgdbforRPI 30.22. telnetforraspberry 30.23. DebuggingRaspberryPiLinuxkernelwithJTAGandGDB 30.24. raspberrypi2_kernel_debug 30.25. fichugh 30.25.1. buildRootstudy-建立自己的作業系統 30.25.2. u-boot組態研究-raspberrypi2 30.25.3. HowtoBuildaGCCCross-Compiler 30.26. ARMassemblerinRaspberryPi 30.26.1. Tableofcontents 30.26.2. Introduction 30.26.3. Registersandbasicarithmetic 30.26.4. Memory,addresses.Loadandstore. 30.26.5. GDB 30.26.6. Branching 30.26.7. Controlstructures 30.26.8. Indexingmodes 30.26.9. Arraysandstructures 30.26.10. Functions(I) 30.26.11. Functions(II).Thestack 30.26.12. Predication 30.26.13. Loopsandthestatusregister 30.26.14. Floatingpointnumbers 30.26.15. Matrixmultiply 30.26.16. Integerdivision 30.26.17. Switchcontrolstructure 30.26.18. Passingdatatofunctions 30.26.19. Localdataandtheframepointer 30.26.20. Theoperatingsystem 30.26.21. Indirectcalls 30.26.22. Subworddata 30.26.23. TheThumbinstructionset 30.26.24. Nestedfunctions 30.26.25. Trampolines 30.26.26. IntegerSIMD 30.26.27. Aprimeraboutlinking 30.26.28. Objectsandlibraries 30.27. ExploringAArch64assembler 30.27.1. Chapter1 30.27.2. Chapter2 30.27.3. Chapter3 30.27.4. Chapter4 30.27.5. Chapter5 30.27.6. Chapter6 30.27.7. Chapter7 30.27.8. Chapter8 30.28. raspberry3b64bit系統安裝,以及交叉編譯環境、調試環境的搭建 30.29. 樹莓派autossh反向隧道 30.30. KernelInitialization 30.31. DebuggingRaspberryPi3withJTAG 30.32. pi3設定 30.33. 兩種方式教你編譯更新RaspberryPi3的內核 31. OpenGL 31.1. opengl(mesa)forubuntu14.04 31.2. ubuntu14.04安裝OpenGL(基於freeglut) 31.3. Ubuntu下安裝OpenGL圖形庫 31.4. OpenGL,glx,glaux,glut,freeglut,glew,glfw,mesa 32. arduino 32.1. ProcessingcommunicationwithArduinoviaserial 32.2. 使用gdb實時調式arduino 32.3. ArduinoUNO控制板簡介 32.4. 時脈算換 32.4.1.I2Cprotocol原理及應用 32.5. 邱小新8051 32.5.1. I2Cprotocol時間計算 32.5.2. 8051clock 32.5.3. I2Cprotocol原理及應用 32.6. I2C 32.7. 讓arduino不需要使用sudo 33. edb 33.1. EDB(Evan'sDebugger) 34. DebugTips 34.1. 分析問題想法筆記 34.2. gcc/g++-instrument-functions參數 34.3. coredump之前的frame 34.4. 使用valgrind檢查cache命中率,提高程序性能 34.5. GDB調試技巧:gdbatpid無法調試的問題 34.6. GDB調試技巧:調試複雜的宏定義 34.7. 使用valgrind檢查內存問題 34.8. GDB技巧:使用checkpoint解決難以復現的Bug 34.9. 強制進程產生coredump,檢測死鎖以及進程快照 34.10. 如何快速地在每個函數入口處加入相同的語句? 34.11. C++源碼的調用圖生成 35. thinker_note 35.1. 如果有人要求你改善系統 35.2. 閱讀程式碼的心理層面 35.3. 學習程式設計的方法?! 35.4. 讀code和讀文章應該差不多 35.5. 程式碼要清的多乾淨? 35.6. GDB追蹤memorycorruption 35.7. GDB自動化debug 35.8. unittest與pdb改善開發效率 35.9. 程式註解如何寫 35.10. 程式碼的可讀性比較 35.11. 軟體元件的使用 36. GCC_and_Clang 36.1. GCC 36.1.1. __thread關鍵字 36.1.2. gcc中-pthread和-lpthread的區別 36.1.3. memorylayoutC++objectsforg++ 36.1.4. gcc-E-P 36.1.5. g++參數介紹 36.1.6. gcc編譯,ld連接 36.1.7. 編譯步驟-組譯連結測試 36.1.8. LinuxGCC編譯4個過程 36.1.9. dlopen()與GCC-rdynamic選項 36.2. Clang 36.2.1. memorylayoutC++objectsforclang 37. FreeRTOS 37.1. FreeRTOS-GCC-ARM926ejs_QEMU 37.2. [STM32]4.移植FreeRTOS 38. tinyclub 38.1. 源碼分析 38.1.1. 靜態分析C程序函數調用關係圖 38.1.2. 動態分析C程序函數調用關係 38.1.3. 函數調用關係繪製方法與逆向建模 38.1.4. 動態分析Linux內核函數調用關係 38.2. Linux彙編語言快速上手:4大架構一塊學 39. VR 39.1. LinuxBuildInstructions 39.2. kalmanfilter 39.3. MPU6050 39.4. 卡爾曼濾波配合程式講解 39.5. MPU6050數據輕鬆分析 39.6. QuatEuler互轉 39.7. 四元數diff 40. Treacecode 40.1. [轉]閱讀程式碼的心理層面 40.2. 我的原始碼閱讀之道 40.3. 磨練閱讀程式技巧,不受黑盒限制 40.4. 閱讀他人的程式碼 40.4.1. 讀懂程式碼,使心法皆為我所用 40.4.2. 摸清架構,便可輕鬆掌握全貌 40.4.3. 優質工具在手,讀懂程式非難事 40.4.4. 望文生義,進而推敲組件的作用 40.4.5. 找到程式入口,再由上而下抽絲剝繭 40.4.6. 閱讀的樂趣:透過程式碼認識作者 41. Log 41.1. 打印log 41.2. 如何在Android各level(包含userspace與kernelspace)使用dumpcallstack的方法 42. embedded 42.1. JTAG是把屠龍刀,說說其作用和原理 42.2. TQ210 42.2.1. TQ210成功使用JLinkdebugkernel 43. LinuxNetwork 43.1. LinuxSocket入門 43.2. Socketprogramming筆記 43.3. TCPSocketProgramming學習筆記 43.4. ntohs,ntohl,htons,htonl的比較 43.5. AF_INET和PF_INET的區別 44. node.js 44.1. 安裝NodeJS、NPM 44.2. JavaScript快速入門[轉] 44.2.1. JavaScript快速入門(序) 44.2.2. JavaScript快速入門(1/10)-訊息輸出 44.2.3. JavaScript快速入門(2/10)-變數與資料型別 44.2.4. JavaScript快速入門(3/10)-數字/字串/布林值 44.2.5. JavaScript快速入門(4/10)-運算子 44.2.6. JavaScript快速入門(5/10)-敘述句if/switch 44.2.7. JavaScript快速入門(6/10)-迴圈 44.2.8. JavaScript快速入門(7/10)-函式 44.2.9. JavaScript快速入門(8/10)-物件 44.2.10. JavaScript快速入門(9/10)-陣列 44.2.11. JavaScript快速入門(10/10)-使用內建物件 45. 100gdbtips 45.1. 信息顯示 45.1.1. 顯示gdb版本信息 45.1.2. 顯示gdb版權相關信息 45.1.3. 輸出信息多時不會暫停輸出 45.1.4. 啟動時不顯示提示信息 45.1.5. 退出時不顯示提示信息 45.2. 函數 45.2.1. 列出函數的名字 45.2.2. 是否進入帶調試信息的函數 45.2.3. 進入不帶調試信息的函數 45.2.4. 退出正在調試的函數 45.2.5. 直接執行函數 45.2.6. 打印函數堆棧幀信息 45.2.7. 打印尾調用堆棧幀信息 45.2.8. 選擇函數堆棧幀 45.2.9. 向上或向下切換函數堆棧幀 45.3. 斷點 45.3.1. 在匿名空間設置斷點 45.3.2. 在程序地址上打斷點 45.3.3. 在程序入口處打斷點 45.3.4. 在文件行號上打斷點 45.3.5. 保存已經設置的斷點 45.3.6. 設置臨時斷點 45.3.7. 設置條件斷點 45.3.8. 忽略斷點 45.4. 觀察點 45.4.1. 設置觀察點 45.4.2. 設置觀察點只針對特定線程生效 45.4.3. 設置讀觀察點 45.4.4. 設置讀寫觀察點 45.5. Catchpoint 45.5.1. 讓catchpoint只觸發一次 45.5.2. 為fork調用設置catchpoint 45.5.3. 為vfork調用設置catchpoint 45.5.4. 為exec調用設置catchpoint 45.5.5. 為系統調用設置catchpoint 45.5.6. 通過為ptrace調用設置catchpoint破解anti-debugging的程序 45.6. 打印 45.6.1. 打印ASCII和寬字符字符串 45.6.2. 打印STL容器中的內容 45.6.3. 打印大數組中的內容 45.6.4. 打印數組中任意連續元素值 45.6.5. 打印數組的索引下標 45.6.6. 打印函數局部變量的值 45.6.7. 打印進程內存信息 45.6.8. 打印靜態變量的值 45.6.9. 打印變量的類型和所在文件 45.6.10. 打印內存的值 45.6.11. 打印源代碼行 45.6.12. 每行打印一個結構體成員 45.6.13. 按照派生類型打印對象 45.6.14. 指定程序的輸入輸出設備 45.6.15. 使用“$\\_”和“$\\__”變量 45.6.16. 打印程序動態分配內存的信息 45.6.17. 打印調用棧幀中變量的值 45.7. 多進程/線程 45.7.1. 調試已經運行的進程 45.7.2. 調試子進程 45.7.3. 同時調試父進程和子進程 45.7.4. 查看線程信息 45.7.5. 在Solaris上使用maintenance命令查看線程信息 45.7.6. 不顯示線程啟動和退出信息 45.7.7. 只允許一個線程運行 45.7.8. 使用“$_thread”變量 45.7.9. 一個gdb會話中同時調試多個程序 45.7.10. 打印程序進程空間信息 45.7.11. 使用“$_exitcode”變量 45.8. coredump文件 45.8.1. 為調試進程產生coredump文件 45.8.2. 加載可執行程序和coredump文件 45.9. 彙編 45.9.1. 設置彙編指令格式 45.9.2. 在函數的第一條彙編指令打斷點 45.9.3. 自動反彙編後面要執行的代碼 45.9.4. 將源程序和彙編指令映射起來 45.9.5. 顯示將要執行的彙編指令 45.9.6. 打印寄存器的值 45.9.7. 顯示程序原始機器碼 45.10. 改變程序的執行 45.10.1. 改變字符串的值 45.10.2. 設置變量的值 45.10.3. 修改PC寄存器的值 45.10.4. 跳轉到指定位置執行 45.10.5. 使用斷點命令改變程序的執行 45.10.6. 修改被調試程序的二進制文件 45.11. 信號 45.11.1. 查看信號處理信息 45.11.2. 信號發生時是否暫停程序 45.11.3. 信號發生時是否打印信號信息 45.11.4. 信號發生時是否把信號丟給程序處理 45.11.5. 給程序發送信號 45.11.6. 使用“$_siginfo”變量 45.12. 共享庫 45.12.1. 顯示共享鏈接庫信息 45.13. 腳本 45.13.1. 配置gdbinit文件 45.13.2. 按何種方式解析腳本文件 45.13.3. 保存歷史命令 45.14. 源文件 45.14.1. 設置源文件查找路徑 45.14.2. 替換查找源文件的目錄 45.15. 圖形化界面 45.15.1. 進入和退出圖形化調試界面 45.15.2. 顯示彙編代碼窗口 45.15.3. 顯示寄存器窗口 45.15.4. 調整窗口大小 45.16. 其它 45.16.1. 命令行選項的格式 45.16.2. 支持預處理器宏信息 45.16.3. 使用命令的縮寫形式 45.16.4. 在gdb中執行shell命令和make 45.16.5. 在gdb中執行cd和pwd命令 45.16.6. 設置命令提示符 45.16.7. 設置被調試程序的參數 45.16.8. 設置被調試程序的環境變量 45.16.9. 得到命令的幫助信息 45.16.10. 記錄執行gdb的過程 46. compiler 46.1. 手把手教你構建C語言編譯器 46.1.1. 前言 46.1.2. 設計 46.1.3. 虛擬機 46.1.4. 詞法分析器 46.1.5. 遞歸下降 46.1.6. 變量定義 46.1.7. 函數定義 46.1.8. 語句 46.1.9. 表達式 46.1.10. 總結 46.2. 自己動手寫編譯器、鏈接器 46.3. 深入淺出教你寫編譯器 46.4. C-compiler-optimizations 46.5. tcc原始碼分析技巧 47. linked_and_loader 47.1. 基礎範例 47.1.1. LIBRARY_PATH和LD_LIBRARY_PATH環境變量的區別 47.1.2. sofilecrashusingaddr2line 47.2. 把共享庫(SO)加載到指定的內存地址 47.3. LinuxGOT與PLT 47.4. GOT和PLT原理簡析 47.5. Linux動態連結資料庫 47.6. 通過GDB調試理解GOT/PLT 47.7. ELF文件的加載 47.8. 再議PLT與GOT 47.9. Linuxgcc鏈接動態庫出錯:LIBRARY_PATH和LD_LIBRARY_PATH的區別 47.10. Linux靜態庫與共享庫的使用 47.11. linux下動態鏈接實現原理 47.12. Linux共用程式庫的組織 47.13. 動態載入函式庫(DynamicallyLodadedLibraries) 47.14. gcc編譯參數-fPIC的一些問題 47.15. Linux下怎樣判斷一個binary是否可以debug 47.16. 查看正在運行的動態鏈接的程序中,某個動態庫中函數的虛擬地址 47.17. 使用另一個版本的glibc 47.18. linux動態裝載動態庫ldd,ldconfig,ld.so.conf,ld.so.cache 47.19. Linux的動態連結與載入(DynamicLinking) 47.20. ld-linux.so.X查找和加載共享動態庫的順序 47.21. -L,-rpath-link,-rpath動態庫的鏈接和鏈接選項 47.22. gcc-rpath動態庫路徑 47.23. 動態庫及靜態庫的製作步驟講解 47.24. 動態鏈接庫的搜索路徑 47.25. Linux添加環境變量與GCC編譯器添加INCLUDE與LIB環境變量 47.26. linux下運行時連結庫的路徑順序 47.27. gcc/g++鏈接時.o文件以及庫的順序問題 47.28. 程式設計師的自我修養 47.28.1. 介紹 47.28.2. 編譯和連結 47.28.3. 目的檔 47.28.4. 靜態連結 47.28.5. 鏈接、裝載、與庫_讀書筆記 47.29. gcc編譯順序問題 47.30. C編譯鏈接 47.31. C加載過程 48. Bochs 48.1. OSdev的Bochs調試 49. Nginx 49.1. nginx模塊使用gdb調試nginx源碼 50. Other 50.1. 練寫作可以讓你成為「神級程式設計師」,但不是不二法門 50.2. 編程的智慧 50.3. 為什麼thread(執行緒、線程)越少越好? 50.4. 頂尖程序員不同於常人的5個區別 50.5. 認知學習法byxdite 50.6. 認知學習法-自學篇byxdite 50.7. 笨方法學語言 50.8. 我是如何學一門新技術的 50.9. 測試的道理 50.10. 快速掌握一個語言最常用的50% 51. DS_ALGO 51.1. 內核雙向鏈表的使用 51.2. Linuxkernellinkedlistimpl.foruserspace 51.3. Linux的container_of與offsetof巨集 51.4. linuxlist.hforuserspace 51.5. Linuxkerneldoublylinked-listimplementation 52. C 52.1. offsetof與container_of 52.2. readcsvinc 52.3. QFormatNumberinC 52.4. IEEE764usingC 52.5. structpointertoarray 52.6. gyrorawdatafilter 52.7. TemplateinC 52.8. signed跟unsigned高位元差別 52.9. 21stCenturyC/21世紀C語言筆記 52.10. 你所不知道的C語言 52.10.1. 為何要深入學習C語言 52.10.2. 指標篇 52.10.3. 編譯器和最佳化原理篇 52.10.4. 函式呼叫篇 52.10.5. 物件導向程式設計篇 52.10.6. 前置處理器應用篇 52.10.7. 動態連結器篇 52.10.8. 遞迴呼叫篇 52.10.9. 數值系統篇 52.10.10. 技巧篇 52.10.11. server-framework 52.10.12. 開發工具和規格標準 52.10.13. goto和流程控制篇 52.10.14. linkedlist和非連續記憶體操作 52.10.15. StreamI/O和EOF 52.10.16. 未定義行為篇 52.10.17. 記憶體管理、對齊及硬體特性 52.11. 幫C語言加上GarbageCollector 52.12. memcpyalignment 52.13. 如何得知malloc/free的呼叫次數 52.14. HowtouseLD_PRELOADanddlsymhook 52.15. CStyle 52.16. C語言的奇技淫巧 53. OpenSoruce 53.1. 開源網絡庫的分析libeventmuduonginx 53.2. libevent專案分析 53.3. 使用gdb研究libevent 53.4. 15款值得學習的小型開源項目,帶你快速步入開源世界 53.5. 最值得閱讀學習的10個C語言開源項目代碼 54. STM32 54.1. STM32的FPU體驗 55. hacker 55.1. c9s 55.1.1. 快速進入工作狀況的十個要點 55.1.2. API設計 — 建構之道:類別建構子設計 55.1.3. 架構之必要 55.1.4. 談設計模式之迷思 55.1.5. 想創業?再想想吧 55.1.6. 健康的泡沫 55.1.7. API設計—命名之術 56. Saleae 56.1. ARMCM4Pratice(3):USART初探 57. Docker 57.1. 構建docker開發環境 57.2. 門外漢的Docker小試身手 57.3. OpenKoreinDockerDockerfile 57.4. 利用iptables給Docker綁定一個外網IP 57.5. Docker修改默認存儲位置 57.6. Docker安裝使用 57.7. 快速刪除多個docker容器的方法 57.8. ubuntudocker開啟ssh 57.9. QEMU+GDB+LK4onDocker 58. Javascript 58.1. 14款基於javascript的數據可視化工具 59. ncku嵌入式課程(Jserv) 59.1. 2016 59.1.1. 利用gprof2dot工具,將最耗時的函式與呼叫的路徑視覺化 59.1.2. GDBcommand開發說明(usePython) 59.1.3. GPIO 59.1.4. 重新理解數值 59.1.5. 類似C++template來實做呢?C11有_Generic關鍵字 59.1.6. mergesort-concurrent 59.1.7. A01:phonebook 59.1.8. A02:raytracing 59.1.9. A03:compute-pi 59.1.10. A04:clz 59.1.11. A05:introspect 59.1.12. A06:phonebook-concurrent 59.1.13. MatrixMultiplicationusingSIMD 60. 逆向工程 60.1. Linux逆向工程的工具介紹 61. Git 61.1. Keepingaforkuptodate 61.2. CloneallreposfromaGitHuborganization 61.3. Git倉庫遷移而不丟失log的方法 61.4. 如何將GIT存儲庫從一個服務器遷移到新服務器 61.5. git文件夾內容過大的解決方法 61.6. gitcommittree保留最新20筆 62. Interview 62.1. DS_Algo 62.1.1. LinkedList的複習總結 62.1.2. 面試精選:鏈表問題集錦 62.1.3. 鏈表面試常見合集 62.1.4. 編程判斷兩個鏈表是否相交 62.2. 面試經驗談-C語言篇 62.3. CHT 62.3.1. 筆試 63. Java 63.1. 開檔讀檔&正則範例 63.2. Thread和Runnable的區別 63.3. 用javac命令行編譯多個java文件 63.4. Java-jar選項與-cp/-classpath 63.5. 打印函數/callstack 63.6. Ubuntu16.04安裝Eclipse 63.7. java命令行編譯運行多個java文件 63.8. Java中變數有效的範圍(VariableScope) 63.9. JavaThread之間記憶體空間分析 63.10. java中如何給Runnable線程傳遞參數? 63.11. Java的兩種多線程實現方式 63.12. gradleinit--typejava-application 63.13. Unittest 63.14. Java併發程式設計-Future系列之Future的介紹和基本用法 63.15. Java_Gossip 63.15.1. 例外處理 63.15.1.1. 要抓還是要拋? 63.15.1.2. 貼心還是造成麻煩? 64. LinearAlgebra 64.1. 理解矩陣 64.2. 旋轉矩陣與四元數 65. Redis 66. OpenCV 66.1. 安裝OpenCV 66.2. ubuntu下多版本opencv切換 66.3. IplImage和Mat互轉 66.4. 通過C++wrapper實現存取圖像像素 66.5. 如何把OpenCVPython獲取的圖像傳遞到C層處理 66.6. ubuntu18.04安裝OpenCV3.4contrib編譯C++ 66.7. Opencv讀寫圖檔基本操作 66.8. Opencv3.4+gdb 66.9. gdb-imagewatch 66.10. OpencvMakefile 67. Qt 67.1. ubuntu編譯安裝qt5.8 67.2. 在QT官網下載最新的版本 67.3. 環境安裝&第一個Qt程式 67.4. 花了6年才找到的bug? 68. SlickEdit 69. Kotlin 69.1. Kotlin?!!這些符號到底什麼意思 69.2. 簡介Kotlin:run,let,with,also和apply 69.3. 與Java的比較 70. Rust 70.1. RustNote 70.2. 給C++使用者的Rust簡介 70.3. Rust概念 70.4. Rust筆記 70.5. Rust與記憶體 70.6. 給C++使用者的Rust簡介:智慧指標 70.7. 給C++使用者的Rust簡介:字串與陣列 70.8. 給C++使用者的Rust簡介:參考型別與BorrowChecker 70.9. 給C++使用者的Rust簡介 70.10. 給C++使用者的Rust簡介:物件導向篇 70.11. 物件導向程式設計 70.12. Linux核心採納Rust的狀況 70.13. 30天深入淺出Rust 70.13.1. Overview 70.13.2. 安裝環境 70.13.3. Rust的套件管理工具Cargo與套件倉庫 70.13.4. Rust基礎 70.13.5. 變數的所有權與借出變數 71. DeepLearning 71.1. 人工智慧、機器學習與深度學習間有什麼區別? 71.2. 機器學習(MachineLearning)介紹 71.3. 深度學習開發環境配置:Ubuntu16.04+NvidiaGTX1080+CUDA8.0 71.4. 在LinuxUbuntu安裝Tensorflow與Keras 72. ParallelComputing 72.1. 並行計算工具的選擇 73. Cuda 73.1. CUDA----HelloWorldFromGPU 74. Math 74.1. 三角函數 74.2. AngleBetweenTwo3DVectors 74.3. FINDINGOPTIMALROTATIONANDTRANSLATIONBETWEENCORRESPONDING3DPOINTS 74.4. 以矩陣來表示轉換 74.5. NumPy矩陣乘法 74.6. 奇異值分解(SVD)---幾何意義 74.7. NumPy中array和matrix用於矩陣乘法時的區別 74.8. OpenGLAnglestoAxes 75. Third-party 75.1. Eigen使用 75.2. C++矩陣處理庫--Eigen初步使用 75.3. C++矩陣庫Eigen快速入門 75.4. Vector3dQuaterniondAffine3dMatrixXdforEigen 75.5. GoogleProtocolBuffers 75.5.1. GoogleProtocolBuffers學習筆記 75.6. openh264在ubuntu下的android版編譯 76. BigData 76.1. Spark與Hadoop關係 76.2. TensorFlow和SparkMLlib有什麼區別? 77. IOT 77.1. ESP8266&NodeMCU開發入門 77.2. 在NODEMCU上執行MICROPYTHON 78. mediaplayer 78.1. vlc-android編譯forubuntu18.04 78.2. C++影像串流RaspberryPicameraRTSP影像串流 78.3. 流媒體與直播技術學習筆記 78.4. Streaming通訊協定RTPRTCPRTSPRTMPHLS介紹 79. 投資 79.1. ubuntuTA-lib的安裝 79.2. talibBBands+twstock 79.3. finviz篩選 80. Golang PublishedwithGitBook Jasonnote C++的Class中的一些重點整理 class與struct有很明顯的的差別是,class可以定義memberfunction,但struct不行。

另外,class預設的member權限是private,而struct預設則是public。

以下是我看螞蟻書的重點整理。

另外,也有參考這篇。

friendfunction:簡單來說就是你在class裡面定義了一個friendfunction,這個function是在class的外面,同時這個function可以修改privatedata。

constfunction:在function後面如果加了const的話,就表示它不會修改任何的menberdata,所以,constobject不能夠呼叫nonconstfunction。

以下講權限範圍,如果沒有定義的話,則預設表示private。

其實跟java很類似,差別在於java沒有friendclass,而且java的預設權限是packagescope。

private:只有自己或者是friendclass看得到(其實就是可不可以直接存取的意思啦)。

protected:只有自己,friendclass或者子類別才可以看得到。

public:任何可以看到這個class的地方都可以使用。

建構子跟解構子也很重要,以前不太清楚解構子可以幹嘛,只知道物件被回收的時候解構子會自動被呼叫。

以下這個例子我覺得很好,應該是說當物件內部有動態配置的時候,可以一起把動態 //exampleonconstructorsanddestructorsrectarea:12 #includerectbarea:30 classCRectangle { int*width,*height; public: //overloading CRectangle(); CRectangle(int,int); ~CRectangle(); //實作內容定義在class以內的有機會被編譯器視為inlinefunction,編譯器會自己作判斷 //inlinefunction會直接將程式碼展開來,與macro非常類似 //程式碼很短,只有returnstatement,用inline較有效率 intarea(void) { return(*width**height); } }; CRectangle::CRectangle() { width=newint; height=newint; *width=5; *height=6; } CRectangle::CRectangle(inta,intb) { width=newint; height=newint; *width=a; *height=b; } CRectangle::~CRectangle() { deletewidth; deleteheight; } intmain() { //若不傳參數,則不需要括弧,java則需要 CRectanglerect(3,4),rectb(5,6),rectc; cout<set_values(4,5); ppoly2->set_values(4,5); //例如父類別沒定義area(),就不能呼叫 cout<set_values(4,5); ppoly2->set_values(4,5); ppoly3->set_values(4,5); //呼叫的是rect的area() cout<area()<area()<area()<area()<set_values(4,5); ppoly2->set_values(4,5); ppoly1->printarea(); ppoly2->printarea(); return0; }



請為這篇文章評分?