2015年3月24日 星期二

專案與專案資料夾相關


目前還是使用Visual C++ 2010,等到Visual C++ 2015出了後,這次真的要買正版了,並用一段長時間,因此買完後,我會將這些文章修成該版本的,並度過我這五年發文章

話不多說

我先來講一下執行檔是如何生成的





取自C++ Primer Plus 6

其實簡單來說,就像網路上面講的,他將您的*cpp or *.c,,經由Compiler編譯成一個個機器看得懂的組合語言,接著再將他和exe必要的一些startup code,及*.lib利用liner合成一個執行檔

其中startup code是一些您程式main啟動前要使用的一些東西,像是堆疊或者一些暫存器,您在PEPortable Executable)格式的檔案檔頭部分應該就是這些東西,進入main後,會是由您的*.olib的實體函式組成

簡單來說lib也是由*.o結合而成,他實際名稱是靜態函式庫(static libary),您可想說他其實就是那些*.o的函式打包在一起,成一個集合,linker會利用他們做好的方法去分析*.o*.lib,將您程式對應變數或者是函式建立關聯

換句話說就是假設你要執行A();他會找A()所在的*.o或者是*.lib,將它指向那個位置,也就是當您執行到A(),他會根據那個位置,去執行實體的程式片段,當所有關聯起來,您的程式就變成一隻完整的程式,它就一定可以執行

要是關聯不起來呢,其實你compiler就不會過,就算會過你也link不起來,您可把compilerlinker看成是一個成熟的技術,當您的程式經由他們處理完,過了,保證能動就對了


再來是資料夾相關問題,您建立一個Visual C++ CLR的專案,您在專案底下第一層,一定會有一個DebugRelease的資料夾,這是32bit編譯出來的程式會出現的地方,顧名思義,要是你選debug版本,他編譯出的程式會到debug資料夾下,release版本就會出現在release資料夾下

這兩個版本有什麼差別呢,其實就是debug版,你程式在跑時可以設置中斷點除錯,相反的release就不行,當然你要有除錯這個功能,程式一定會加入一些除錯的機制,因此編譯出的程式一定比較慢,release相對的比較快(其實快很多,你程式寫大時編譯兩種版本利用stopwatch算算看,可以很明顯的看出時間差異)

當然現在程式可以編成64bit程式,當您編出程式後,會多一個x64的資料夾,裡面一樣有debugrelease的資料夾,同32bit就不重新描述了

在下一層裡,主要是放您的程式碼跟頭檔的根目錄,從此出發,您可在該目錄下建立資料夾,管理您的程式碼或是lib檔,這個目錄下面也有debugreleasex64,裡面放的就是您編譯完的*.oVisual C++都幫您配置好了,比起Borland C++ XE7,還要自己管理您的全部檔案,方便很多

等買Visual C++ 2015再來補圖Orz

再來就要講C++的部分了

2015年3月23日 星期一

淺談c++ builder XE7(之前寫錯有修改一下)


在公司寫案子是使用Borland C++ 5,因為公司是做光學檢測相關,需要載入很大張的影像,往往一張影像就500MB,如果為了檢測要快,往往會在檢測前先配置好所有的記憶體避免機台自動化檢測時一直動態配置記憶體,導致檢測時間加長,因此在配置所有記憶體完,檢測時32bit的程式記憶體就暴了 

記憶體暴了會怎樣呢,就是程式就會當掉失去功能 

因此,64bit是一個趨勢,就算您覺得32bit堪用,只要碰到影像處理,在掃一張16K(16384像素)的大圖,一張圖可能就要1GB4GB的空間根本不夠用

為了要將程式改成64bit,公司IDEBorland C++ 5升級到Borland C++ XE7,他可以編譯出64bit的程式

因此就摸到2014年出的Borland C++ XE7
 

Borland C++ XE7缺點
1.當你程式寫大型時,常常Debug停住時,滑鼠放到變數上面會看不到變數的值
 
2.一般工程師,其實應該跟我一樣,並不懂的他IDE如何運作,要是includeinclude好或者include太多,你打個變數,他就會在卡在那裏計算一些東西,導致您Coding困難
 
3.很長寫一寫就出錯要重開,重點還是在你根本不知道他做了什麼處理,導致當掉

Windows API是通用的,因此其實到後期要兜出自己的Windows API模組,原因很簡單,就是不爽跳槽時,你可以帶到別的IDE去,不會被綁死(換了IDE就像是變成廢物,什麼都重頭來),也就是為什麼我會開始遠離使用元件(不利跳槽0.0)

(2015/08/16)
雖然C++ builder有上述缺點,不過經我最近研究,要寫C++基本上只有C++ builder
微軟基本上賣點就是那個C#,並且C++.NET基本上已經消失了

所以有缺點還是要用C++ builder(TOT,除非想寫C#)

基本上我是做Winform程式的,所以我的C++,基本上是拿C++ builder來講

前言...0.0


        小弟是一個很弱的軟體工程師,但是其實工作兩年來也成功接手維護了3個主要中大型案子,把不穩定的系統改到非常穩定可以使用(其實主要就是工作背景執行緒化,大致上就解決了)

        基本上是半路出家,並不完全受過正統的軟體相關教育,因此相關應用程式如何實際的從Cpp to .o to .exe,實際中間編譯器或連結器處理的知識並不知道

        不過目前也從做中學學到一些或感覺到一些不完整或者可能是錯的知識,因此無聊寫在自己的部落格上與有緣人討教討教

        小弟習慣不好,很隨興,有可能哪天腦袋不清楚就把部落格刪掉(印象有做過類似的事情()),因此,別太期待該部落格會多正式,完整,多有用

        在沒刪除和停止更新前,原則上一年會定時發三次文章(4月、8月、12),先看看能不能持續寫個五年,歡迎留言指正我的錯誤(要是確定是對的會修正文章)