Time of Update: 2018-12-03
C程式最佳化之路 本文摘自遊戲變成開發文章。 本文講述在編寫C程式碼的常用最佳化辦法,分為I/O篇,記憶體篇,演算法篇,MMX彙編篇。 一.I/O篇 如果有檔案讀寫的話,那麼對檔案的訪問將是影響程式運行速度的一大因素。提高檔案訪問速度的主要辦法有兩個:一是採用記憶體對應檔,二是使用記憶體緩衝。下面是一組測試資料(見《UNIX環境進階編程》3.9節),顯示了用18種不同的緩衝長度,讀1 468 802位元組檔案所得到的結果。
Time of Update: 2018-12-03
Windows下C++程式預設的棧空間是2M(VC++2008編譯器預設1M,這個值是可以在編譯器中設定的。隨手寫了一段棧溢出的代碼: #include <iostream> using std::cout; using std::endl;int main() { int a[1024][256]={0}; //在棧上分配,大小為1M,運行時棧溢出掛掉! return 0; }最簡單的修改方法,聲明動態數組,在堆上面分配。如果對效能過于敏感,可以用記憶體池。
Time of Update: 2018-12-03
錯誤:fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?原因:在尋找先行編譯指示標頭檔時,檔案未預期結束。MFC的build不支援C檔案。解決辦法:按右鍵項目工程中的C檔案,在菜單Project->Settings->C/C++->Precompile
Time of Update: 2018-12-03
導讀: Calendar Time:日曆時間,是用“從一個標準時間點到此時的時間經過的秒數”來表示的時間。這個標準時間點對不同的編譯器來說會有所不同,但對一個編譯系統來說,這個標準時間點是不變的,該編譯系統中的時間對應的日曆時間都通過該標準時間點來衡量,所以可以說日曆時間是“相對時間”,但是無論你在哪一個時區,在同一時刻對同一個標準時間點來說,日曆時間都是一樣的。
Time of Update: 2018-12-03
C#調用winmm.dll播放聲音2006-08-12 08:52下面的 C# 程式碼範例示範如何在 Windows 平台上使用平台叫用服務來播放波形音效檔。 樣本 此程式碼範例使用 DllImport 將 winmm.dll 的 PlaySound 方法進入點作為 Form1 PlaySound() 匯入。該樣本具有一個帶有一個按鈕的簡單 Windows 表單。單擊該按鈕可開啟標準 Windows OpenFileDialog 對話方塊,以便開啟要播放的檔案。選擇波形檔案後,將使用
Time of Update: 2018-12-03
晚上無意翻看Bjarne Stroustrup的'The C++ Programming Language Special Edition'(英文版)第94頁,章節5.4 Constants一節,看到這麼一句原文'C++ offers the concept of a user-defined constant, a const, to express the notion that a value doesn't change
Time of Update: 2018-12-03
C語言的標準庫函數包括一系列日期和時間處理函數,它們都在標頭檔中說明。下面列出了這些函數。在標頭檔中定義了三種類型:time_t,struct tm和clock_t。 在中說明的C語言時間函數 time_t time(time_t *timer); double difftime(time_t time1,time_t time2); struct tm *gmtime(const time_t *timer); struct tm *localtime(const time_t *timer)
Time of Update: 2018-12-03
導讀: C/C++編程易範的錯誤 摘自《windows 95編程指南》,[美]Stephen R.Davis 著 C/C++語言中有許多對初學者(甚至是有經驗的編程人員)來說很容易範的錯誤。通曉這樣的錯誤可使你免於陷入其中。 1.忘記初始化指標 這種錯誤只是一般"忘記初始設定變數"錯誤的一個特殊形式(C/C++中變數不會自動初始化,而Basic可以)。使這種錯誤更糟糕的原因是它的後果往往更加糟糕: void SomeFunction() { int *pnVar
Time of Update: 2018-12-03
導讀: 運算子的種類C語言的運算子可分為以下幾類: 1.算術運算子 用於各類數值運算。包括加(+)、減(-)、乘(*)、除(/)、求餘(或稱模運算,%)、自增(++)、自減(--)共七種。 2.關係運算子 用於比較運算。包括大於(>)、小於(=)、小於等於( 3.邏輯運算子 用於邏輯運算。包括與(&&)、或(||)、非(!)三種。 4.位操作運算子
Time of Update: 2018-12-03
現在都說有兩種模式C/S和B/S。如果我把B視為視為一種特殊的Client的話,那麼其實都統一到C/S中去了。雖然這種說法不是很嚴謹。說說我們熟知的C/S模式:用戶端-伺服器模式。看在簡單,其實這確實現在水平擴充或者垂直擴充的根基。1.最簡單的C/S模式Client負責的任務就不用說了,而對於Server端來說呢,一般它既要是應用伺服器也要是資料庫伺服器。所以基於分割的想法,就將server分為應用伺服器和資料庫伺服器了。也就得到了2的模式。2.分離Server的C/S模式這種模式的C/S模式現
Time of Update: 2018-12-03
如果在你的原始碼中經常見到如下代碼:/* To Identify a letter */if ((i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z'))/* To Identify a digit */if ( i >= '0' && i <=
Time of Update: 2018-12-03
_T("")是一個宏,他的作用是讓你的程式支援Unicode編碼 因為Windows使用兩種字元集ANSI和UNICODE, 前者就是通常使用的單位元組方式, 但這種方式處理象中文這樣的雙位元組字元不方便, 容易出現半個漢字的情況。 而後者是雙位元組方式,方便處理雙位元組字元。 Windows NT的所有與字元有關的函數都提供兩種方式的版本,而Windows 9x只支援ANSI方式。 如果你編譯一個程式為ANSI方式, _T實際不起任何作用。
Time of Update: 2018-12-03
1、你認為C語言[注1]是一門成功的語言嗎?如果認為是,那麼你認為它成功的關鍵在什麼地方?或者說它的魅力所在?2、C語言中的函數是否允許使用複合類型(如結構體類型)作為傳回值?3、C語言中的'一般算術運算'(usual arithmetic conversion)中蘊含著一種稱作'值保留(value
Time of Update: 2018-12-03
這篇文章涉及的內容已經不是什麼新鮮玩意了。對於部分三角和全體星級的使用者來說,這隻是些小把戲。我從眾多的小把戲中挑了幾個出來說明了一下,也沒有什麼高深的概念,至於我寫這個的目的,其實也沒什麼,閑來無事吧。 1,獲得一個指標進行一次解引用之後的類型。 指標在解引用一次之後會得到它引用對象的類型。我們可以用偏特化來得到這個類型。 template struct rm_a_ptr { typedef T value_type; }; template struct rm_a_ptr {
Time of Update: 2018-12-03
作者: 潘凱 出處: vchelp 責任編輯: 方舟 [ 2005-11-11 13:52 ]前言 本文通過觀察對象的記憶體布局,跟蹤函數調用的彙編代碼。分析了C++對象記憶體的布局情況,虛函數的執行方式,以及虛繼承,等等。 寫這篇文章源於我在論壇上看到的一個貼子。有人問VC使用了哪種方式來實現虛繼承。當時我寫了一點代碼想驗證一下,結果發現情況比我想象的要複雜。所以我就乾脆認真把相關的問題都過了一遍,並記錄成本文。 我對於C++物件模型的知識主要來自於Lippman的書《Inside
Time of Update: 2018-12-03
作者: 徐兆元 出處: CSDN BLOG 責任編輯: 方舟 當你涉及到C/C++的核心編程的時候,你會無止境地與記憶體管理打交道.這些往往會使人受盡折磨.所以如果你想深入C/C++編程,你必須靜下心來,好好苦一番。 現在我們將討論C/C++裡我認為哪一本書都沒有完全說清楚,也是涉及概念細節最多,語言中最難的技術之一的動態記憶體的傳遞.並且在軟體開發中很多專業人員並不能寫出相關的合格的代碼。 【引入】 看下面的例子,這是我們在編寫庫函數或者項目內的共同函數經常希望的。void
Time of Update: 2018-12-03
作者: 管寧 出處: 天極網 責任編輯: 方舟 堆記憶體(heap)是什麼呢? 我們知道在c/c++中定義的數組大小必需要事先定義好,他們通常是分配在靜態記憶體空間或者是在棧記憶體空間內的,但是在實際工作中,我們有時候卻需要動態為數組分配大小,在這裡c庫中的malloc.h標頭檔中的malloc()函數就為您解決了問題,(bc或者是在老的標準中是alloc.h),它的函數原形是void* malloc(size_t
Time of Update: 2018-12-03
結構體是由若干成員組成的.布局有兩種 1.Sequential,循序配置,比如 struct S1 { int a; int b;} 那麼預設情況下在記憶體裡是先排a,再排b也就是如果能取到a的地址,和b的地址, 則相差一個int類型的長度,4位元組
Time of Update: 2018-12-03
作者: 出處: 論壇 責任編輯: 方舟 在嵌入式系統中使用C++的一個常見問題是記憶體配置,即對new 和 delete 操作符的失控。 具有諷刺意味的是,問題的根源卻是C++對記憶體的管理非常的容易而且安全。具體地說,當一個對象被消除時,它的解構函式能夠安全的釋放所分配的記憶體。 這當然是個好事情,但是這種使用的簡單性使得程式員們過度使用new 和
Time of Update: 2018-12-03
作者: 杜紅超 何青青 出處: blog 責任編輯: 方舟一、為什麼用動態記憶體分配 但我們未學習鏈表的時候,如果要儲存數量比較多的同類型或同結構的資料的時候,總是使用一個數組。比如說我們要儲存一個班級學生的某科分數,總是定義一個float型(存在0.5分)數組:float