原创 進程內存分佈
進程內存分佈 之前一直在分析棧,棧這個東西的作用也介紹得差不多了,但是棧在哪兒還沒有搞清楚,以及堆、代碼、全局變量它們在哪兒,這都牽涉到進程的內存分佈。 linux 0.01 的進程內存分佈 內存分佈隨着操作系統的更新換代,越來
原创 static變量 及 作用域控制
static變量 及 作用域控制 一、static變量 static變量放在函數中,就只有這個函數能訪問它;放在函數外就只有這個文件能訪問它。 下面我們看看兩個函數中重名的static變量是怎麼區別開來的(static.c): #i
原创 內存對齊
內存對齊 爲什麼要進行內存對齊 在計算機組成原理中我們學到:一塊內存芯片一般只提供 8 位數據線,要進行 16 位數據的讀寫可採用奇偶分體來組織管理多個芯片, 32 位也類似: 這樣,連續的四個字節會分佈在不同的芯片上,送入地
原创 未初始化全局變量
未初始化全局變量 爲下一篇介紹進程內存分佈做準備,這一篇先來介紹一下未初始化全局變量: 未初始化全局變量,這名字就很直白,就是 C 程序中定義成全局作用域而又沒有初始化的變量,我們知道這種變量在程序運行後是被自動初始化爲 全0
原创 Binder Q&A
binder mmap 的內存是每個進程獨立的嗎?會存在拷貝? 是獨立的(1MB - 8KB),用於接收數據。發送 BC_TRANSACTION/BC_REPLY (請求/回包)的時候拷貝buffer(參數)和 offsets(參數中
原创 commit 和 push 的臨界點
估計很多使用 git 的同學把握不住什麼時候應該 commit, 什麼時候又應該把未提交的 commits 都 push 上去, 今天我就把我的理解說一說。 首先,有一條原則應該是要遵循的: 提交描述 = 提交的修
原创 64位系統能使用多少內存
疑問 我們知道32位win7一般只能使用4GB內存,原因是如果按照地址寬度是32bit(其實並不是)來算的話系統最多隻能管理232 字節的內存(通過補丁的方式可以使32位win7突破4GB的限制,關鍵詞:ReadyFor4GB,後面我會講
原创 直接能用的數據結構
本篇算是對集合類的總結。 常用的數據結構有:數組、鏈表、棧、隊列、樹、圖。 這些數據結構都可以直接或間接地用 stl、util 中的集合類來表示: 數據結構 數組 鏈表 棧 隊列 樹 圖 C++ vector list list li
原创 Android JNI(NDK)開發總結
早就知道Java有個jni可以調用本地化代碼,一直沒有動力去研究它,現在公司想通過在Android中調用本地化代碼來申請較多的內存以突破Android對單個進程的內存限制,這確實是可行的:我的Nexus4內存2G,Android限制每個進
原创 VirtualBox裝ghost XP
一直使用"免費"的VMware,總覺得良心不安, 特別是走向工作崗位後尊重版權的意識越來越強烈, 心裏想着還是用正版或者開源的好,於是就看上了開源的VirtualBox。 VirtualBox支持VMware的vmdk格式的虛擬硬盤,
原创 git如何知曉文件差異
求兩版本之間的差異是一個動態規劃問題 git 能發現任何的改動,但它是怎麼發現的呢?難道它監控了我們對文件的讀寫操作? git 纔沒這麼雞凍……它是通過比較新舊版本,掐指一算算出來的O(∩_∩)O。 首先假設我們只能通過以下3
原创 封裝 WinSock C/S 通信
最近在做一個小東西的時候又用上了TCP通信,之前用VB做過,用java做過,用MFC的CSocket也做過,不敢說精通此道,但體會還是有的,這次打算用C++與WinSock來實現一個DLL,這樣不論是MFC程序還是非MFC程序都能用
原创 git版本管理的優點
如果軟件規模比較大、或者多人開發,應該進行版本管理以避免源碼的混亂。 之前還沒用過 git 的時候,我以爲版本管理就是給自己的程序自動升級版本號的軟件(從 2.6.39 自動升級到 2.6.40),以至於當我看了 git、svn、
原创 安裝git和創建版本庫
安裝 git 首先介紹一下 git 是怎麼誕生的: 2005 年,當時 linux 內核使用商業軟件 BitKeeper 進行版本管理。Samba的作者Andrew Tridgell 試圖嘗試對 BitKeeper 反向工程, 以開
原创 用String分析固定格式的文本
上學期做一個任務:從 log文件 中提取出 java異常(Exception)的相關信息。 log文件的每一行都有固定的格式:包括 時間戳、信息類型、信息內容 等等。 一開始我想這是不是得用編譯原理那套工具 lex、yacc 來做