原创 C/C++內存管理(隨筆)

1:內存管理,從廣義上來看,其實可以說是資源管理。 而“資源”包括:內存,IO資源(文件句柄,設備句柄),GDI,(多線程環境下的)各種臨界區資源。 要想實現有效的資源管理,有效的資源回收機制,就必須確保一個前提條件:每個資源都有他們的所

原创 C語言中,當計算字符數組長度時,用sizeof 和strlen 的原理及兩者的區別

  字符數組的長度計算:必須以終止符’\0'作爲邊界,但對字符數組賦值時,有兩種方式: 1: 定義時用字符初始化 (1)char chs[7] = {'a', 'c', '0', 'z', '3','d'}; // 長度爲6  上式等價於

原创 已知一個一維數組:BYTE imageArray[width * height], 怎樣在VC++2008的MFC中,用GDI+,創建一個Bitmap對象,與該數組建立關聯?

因爲一維數組裏面放的的width*height 的8bit灰度圖像數據,我想把它與一個Bitmap 對象相關聯,這樣的話,就可以用GDI+中的Graphics 等對象和函數 來方便將imageArray中的數據在窗口中顯示出來,(我知道用

原创 關於進程的4GB虛擬地址空間概念的理解

     每個進程有4GB的虛擬內存空間,這是一個概念上的東西,並不是實際上的分配。當程序啓動並加載到內存中時,這裏的“內存”指的是虛擬內存,它由兩部分組成:硬盤上的頁交換文件和實際的物理內存。     從運行的程序自身來看,程序中包含的

原创 關鍵字static在C和C++中的區別

首先,C++是C的超集,所以static在C中的用法 對於C++來說是全盤接受的,而兩者的不同也就是C++中多出來的特性,而這些多出來的特性與C++面向對象的特性有關,或更具體的說,就是static在“類”中的意義和作用。1:C語言中的S

原创 C語言對結構化程序設計的支持

軟件設計從架構上來說,以下幾點是其基本的指導原則:1:低耦合、高內聚2:開閉原則,即對擴展開放,對修改關閉3:功能的模塊化、正交化。。。所有這些原則的根本目的是:提高軟件的可複用性、可擴展性。各種高級編程語言,爲了實現這一目的,都在自身語

原创 從程序到進程:談談可執行文件是如何與進程相對應並最終被CPU執行的。

背景知識1:虛擬內存空間 從實模式到保護模式,從實際物理地址的訪問到虛擬地址空間的訪問。這一轉變也導致了可執行文件的載入內存方式的轉變,即:從簡單的一次性裝入(基本上就是一個拷貝、粘貼的過程),演變成由操作系統負責調度和裝入內存。 而演變

原创 對於內存分配的理解

在實際運行的時候,OS會爲每一個可執行文件(或程序)分配一塊內存空間(注意:這裏的內存空間是4GB的虛擬地址空間,並最終由OS定向到實際的物理內存,而實際內存的大小是根據進程的PCB中的信息得到的),用於容納程序所對應的進程。而這塊內存由

原创 編譯器對語言特性的支持

類型 : 不同的類型通過對應不同的內存大小和地址偏移量 指針: 用不同的尋址方式:直接尋址和間接尋址 static,extern: 不同限定的變量放在不同的存儲區域, 這裏是 將變量放在靜態存儲區 auto: 放在 堆棧上,並通過不同的地

原创 C/C++中變量的可見性與生命期區別的本質原因

可見性與生命期可見性又可稱爲:作用域,它是“棧”這種存儲方式的表現形式。不管是全局的可見性(全局作用域)、還是局部可見性(局部作用域),從一個對象(或稱爲變量、實例)的入棧(開始可見)到其出棧(變成不可見),是該對象的整個的作用域。可見性

原创 "The requested resource (... processLogin.action) is not available"的問題所在及解決辦法

在JSP中,運用了Struts2.1框架,當Form表單提交時,常常會出現"The requested resource (***.action) is not available”的異常。如果其它配置選項都沒問題的話,其實錯誤的提示已經

原创 橋接模式與其它幾種相近的設計模式之間的區別與比較

完整版地址: http://chjavach.iteye.com/blog/756233 橋接模式和策略模式     這兩個模式有很大的相似之處。     如果把橋接模式的抽象部分簡化來看,如果暫時不去擴展Abstraction,也

原创 關於斷言與錯誤處理,以及測試用例的設計

錯誤處理:淨化從外部接口輸入的參數,它是用來處理預期會發生的情況;斷言: 處理絕不應該發生的情況,用於子程序,系統內部的程序,用於調試開發中如果在子程序接口入口處發生了斷言,則說明:調用了該子程序的外部程序存在錯誤,而不是子程序本身有錯誤

原创 堆排序

篩選: 前提是:一個小堆(或稱爲完全二叉樹),除根節點以外,它的左右子樹都已經是一個堆,現在要做的是:通過對根節點的調整,使得整個二叉樹稱爲一個堆,而這一過程,我們稱之爲:篩選! 建堆: 從一個無序序列建成一個堆的過程,其實質就是一個不斷

原创 C++之萃取技術 筆記

#include <iostream> using namespace std; //tag class _xFalse {}; class _xTrue {}; template<typename T>