青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++ Coder

HCP高性能計算架構,實現,編譯器指令優化,算法優化, LLVM CLANG OpenCL CUDA OpenACC C++AMP OpenMP MPI

C++博客 首頁 新隨筆 聯系 聚合 管理
  98 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

#

        __kernel  
          __attribute__((reqd_work_group_size(NUM_WGS_RMQMIN,
1,1)))  
          
void rmq_levelMin(global int* gSparseTable, int blkSize, int level, int numBlocks)    
         {    
          u32 gIdx 
= GET_GLOBAL_IDX;    
          
if(gIdx >= numBlocks) return;     
          
int startIdx = numBlocks*(level);    
          
int calWi=1<<level;    
          
int flatSTIdxCmp2 = ((gIdx+calWi<numBlocks)?(gIdx+calWi):gIdx);    
          gSparseTable[gIdx
+numBlocks*(level+1)] = (gSparseTable[gIdx+startIdx] < gSparseTable[flatSTIdxCmp2+startIdx])?gSparseTable[gIdx+startIdx] : gSparseTable[flatSTIdxCmp2+startIdx];    
         }    
posted @ 2012-12-19 20:48 jackdong 閱讀(253) | 評論 (0)編輯 收藏

http://blog.csdn.net/liang5630/article/details/7917702

1. 概述

RMQ(Range Minimum/Maximum Query),即區間最值查詢,是指這樣一個問題:對于長度為n的數列A,回答若干詢問RMQ(A,i,j)(i,j<=n),返回數列A中下標在i,j之間的最小/大值。這兩個問題是在實際應用中經常遇到的問題,下面介紹一下解決這兩種問題的比較高效的算法。當然,該問題也可以用線段樹(也叫區間樹)解決,算法復雜度為:O(N)~O(logN),這里我們暫不介紹。


2.RMQ算法

對于該問題,最容易想到的解決方案是遍歷,復雜度是O(n)。但當數據量非常大且查詢很頻繁時,該算法無法在有效的時間內查詢出正解。

本節介紹了一種比較高效的在線算法(ST算法)解決這個問題。所謂在線算法,是指用戶每輸入一個查詢便馬上處理一個查詢。該算法一般用較長的時間做預處理,待信息充足以后便可以用較少的時間回答每個查詢。ST(Sparse Table)算法是一個非常有名的在線處理RMQ問題的算法,它可以在O(nlogn)時間內進行預處理,然后在O(1)時間內回答每個查詢。


(一)首先是預處理,用動態規劃(DP)解決。

設A[i]是要求區間最值的數列,F[i, j]表示從第i個數起連續2^j個數中的最大值。(DP的狀態)

例如:

A數列為:3 2 4 5 6 8 1 2 9 7

F[1,0]表示第1個數起,長度為2^0=1的最大值,其實就是3這個數。同理 F[1,1] = max(3,2) = 3, F[1,2]=max(3,2,4,5) = 5,F[1,3] = max(3,2,4,5,6,8,1,2) = 8;

并且我們可以容易的看出F[i,0]就等于A[i]。(DP的初始值)

這樣,DP的狀態、初值都已經有了,剩下的就是狀態轉移方程。

我們把F[i,j]平均分成兩段(因為f[i,j]一定是偶數個數字),從 i 到i + 2 ^ (j - 1) - 1為一段,i + 2 ^ (j - 1)到i + 2 ^ j - 1為一段(長度都為2 ^ (j - 1))。用上例說明,當i=1,j=3時就是3,2,4,5 和 6,8,1,2這兩段。F[i,j]就是這兩段各自最大值中的最大值。于是我們得到了狀態轉移方程F[i, j]=max(F[i,j-1], F[i + 2^(j-1),j-1])。

代碼如下:

 

  1. void RMQ(int num) //預處理->O(nlogn)  
  2. {  
  3.     for(int j = 1; j < 20; ++j)  
  4.         for(int i = 1; i <= num; ++i)  
  5.             if(i + (1 << j) - 1 <= num)  
  6.             {  
  7.                 maxsum[i][j] = max(maxsum[i][j - 1], maxsum[i + (1 << (j - 1))][j - 1]);  
  8.                 minsum[i][j] = min(minsum[i][j - 1], minsum[i + (1 << (j - 1))][j - 1]);  
  9.             }  
  10. }  


這里我們需要注意的是循環的順序,我們發現外層是j,內層所i,這是為什么呢?可以是i在外,j在內嗎?

 


答案是不可以。因為我們需要理解這個狀態轉移方程的意義。

狀態轉移方程的含義是:先更新所有長度為F[i,0]即1個元素,然后通過2個1個元素的最值,獲得所有長度為F[i,1]即2個元素的最值,然后再通過2個2個元素的最值,獲得所有長度為F[i,2]即4個元素的最值,以此類推更新所有長度的最值。

而如果是i在外,j在內的話,我們更新的順序就是F[1,0],F[1,1],F[1,2],F[1,3],表示更新從1開始1個元素,2個元素,4個元素,8個元素(A[0],A[1],....A[7])的最值,這里F[1,3] = max(max(A[0],A[1],A[2],A[3]),max(A[4],A[5],A[6],A[7]))的值,但是我們根本沒有計算max(A[0],A[1],A[2],A[3])和max(A[4],A[5],A[6],A[7]),所以這樣的方法肯定是錯誤的。


為了避免這樣的錯誤,一定要好好理解這個狀態轉移方程所代表的含義。



(二)然后是查詢。

假如我們需要查詢的區間為(i,j),那么我們需要找到覆蓋這個閉區間(左邊界取i,右邊界取j)的最小冪(可以重復,比如查詢5,6,7,8,9,我們可以查詢5678和6789)。

因為這個區間的長度為j - i + 1,所以我們可以取k=log2( j - i + 1),則有:RMQ(A, i, j)=max{F[i , k], F[ j - 2 ^ k + 1, k]}。

舉例說明,要求區間[2,8]的最大值,k = log2(8 - 2 + 1)= 2,即求max(F[2, 2],F[8 - 2 ^ 2 + 1, 2]) = max(F[2, 2],F[5, 2]);


在這里我們也需要注意一個地方,就是<<運算符和+-運算符的優先級。

比如這個表達式:5 - 1 << 2是多少?


答案是:4 * 2 * 2 = 16。所以我們要寫成5 - (1 << 2)才是5-1 * 2 * 2 = 1。

posted @ 2012-12-17 10:45 jackdong 閱讀(571) | 評論 (0)編輯 收藏

     摘要: http://pastebin.com/fije3CKf #include <stdlib.h> #include <stdio.h> #include <string.h> #include <CL/opencl.h>   cl_int cl_error; // OpenCL error code cl_device_i...  閱讀全文
posted @ 2012-12-03 21:32 jackdong 閱讀(818) | 評論 (0)編輯 收藏

http://diybbs.zol.com.cn/1/34036_828.html
Windows8是微軟全新的操作系統,肯定有很多IT發燒友都迫不及待的想一睹全新Windows的風采,今天我們就首先來說說如何安裝windows8。
  
  作為全新的Windows,安裝的方法有很多種,大家都知道,windows8為平板電腦做了改進和優化,這不津有人會問如果是平板電腦,或者超薄筆記本電腦,沒有光驅,怎么安裝呢?
  
  像Windows7一樣,Windows8同樣可以使用U盤作為安裝介質,具體安裝步驟如下:
  
  1、 通過windowsUSBDVDTool制作U盤啟動盤
  
  a) 首先下載windowsUSBDVDTool,體制為:
  
  h t t p : //images2.store.microsoft.com/prod/clustera/framework/w7udt/1.0/en-us/Windows7-USB-DVD-tool.exe
  
  
  
  b) 下載完成后雙擊打開,單擊“Browse”選擇Windows8的ISO鏡像,并單擊下一步。
  
  
  
  
  
  c) 單擊“USBdevice”,并選擇你U盤的盤符,U盤容量應不小于4Gb。之后選擇“Begincopying”
  
  
  
  
  
  d) 在選擇EraseUSBDevice后,等待程序制作完成即可。
  
  2、 使用命令提示符制作U盤啟動盤
  
  如果不方便從網上下載U盤制作工具,也可以用命令提示符的方法安裝。
  
  a) 使用管理員模式運行“命令提示符”
  
  b) 鍵入diskpart并回車,啟動磁盤管理工具。
  
  
  
  c) 使用listdisk命令查看U盤的磁盤ID,如圖,此臺計算機上U盤的ID為“磁盤3”
  
  d) 使用selectdisk3命令選中U盤。
  
  
  
  e) 使用clean命令清除磁盤上所有內容。
  
  f) 使用createpartitionprimary為U盤創建一個主分區,并使用selectpartition1選擇這個分區
  
  
  
  g) 使用formatfs=ntfsquick命令為這個U盤快速格式化成NTFS文件系統。
  
  h) 格式化完成后,使用active命令設置當前磁盤為活動狀態。
  
  3、 將windows8安裝文件復制到U盤中。將windows8安裝光盤中的所有文件復制到U盤中即可;或將Windows8安裝鏡像(iso)使用第三方工具打開后,復制其所有內容至U盤中。
  
  4、 安裝windows8
  
  a) 將BIOS設置為U盤啟動,并重啟電腦,注意有UEFI設置的電腦,需要打開安全功能才能正常安裝windows8.
  
  
  
  b) 與光盤安裝相同,U盤引導首先會出現Betta魚界面
  
  
  
  c) 選擇所在國家及語言、輸入法等設置,單擊下一步開始安裝。
  
  
  
  
  
  d) 在輸入完產品密鑰、接受許可協議后,選擇“自定義:僅安裝Windows(高級)”。建議全新安裝Windows8而不使用升級安裝。
  
  
  
  
  
  e) 在選擇安裝磁盤時,系統會默認劃分出一個350Mb大小的系統保留分區,用于保存啟動設置和Windows故障修復。
  
  
  
  f) 單擊下一步開始安裝Windows,此過程不需要用戶參與,安裝程序會自動在若干次重啟后完成安裝。
  
  5、 首次使用Windows8的設置
  
  
  
  a) 像以往的Windows操作系統一樣,Windows8也是有這樣的設置的。第一個設置就是為我們的計算機起個名字,注意,這不是用戶的名字哦,而是你電腦的名字。輸入完成后單擊下一步即可。
  
  b) 由于Windows8默認MicrosoftID登錄,所以在設置用戶名之前,系統會首先要求鏈接網絡。當然如果沒有網絡連接的話,跳過這一步就可以了。
  
  
  
  c) 如果在第二步你已經成功連接了網絡,為了更好的體驗Windows8,建議大家使用WindowsLiveID登錄。輸入你WindowsLiveID的用戶名和密碼就可以了。
  
  
  
  d) 如果在第二步你沒有連接到網絡,或者你不希望使用WindowsLiveID登錄,可以點擊屏幕下側的“不想用Microsoft帳戶登錄”,之后和以前版本的Windows一樣,輸入用戶名、密碼、密碼提示后就可以了。
  
  
  
  單擊完成后,讓我們盡情體驗windows8之美吧!制作的安裝U盤可以無限次使用哦。
posted @ 2012-11-22 23:16 jackdong 閱讀(349) | 評論 (0)編輯 收藏

OpenCL標準簡介

OpenCL應用程序含有兩部分。OpenCL主程序是純軟件例程,以標準C/C++編寫,可以運行在任何類型的微處理器上。例如,這類處理器可以是FPGA中的嵌入式軟核處理器、硬核ARM處理器或者外置x86處理器,如圖4所示。

   在這一主軟件例程執行期間的某一點,某一功能有可能需要很大的計算量,這就可以受益于并行器件的高度并行加速功能,例如CPU、GPU、FPGA等器件。要加速的功能被稱為OpenCL內核。采用標準C編寫這些內核;但是,采用結構對其進行注釋,以設定并行處理操作和存儲器等級。圖5中的例子對兩個數組a和b進行矢量加法,將結果寫回輸出數組應答中。矢量的每一元素都采用了并行線程,當采用像FPGA這類具有大量精細粒度并行單元的器件進行加速時,能夠很快的計算出結果。主程序使用標準OpenCL應用程序接口(API),支持將數據傳送至FPGA,調用FPGA內核,傳回得到的數據。

1Khronos集團網站對OpenCL標準進行了詳細的介紹。

       與CPU和GPU不同,其并行線程可以在不同的內核中執行,而FPGA能夠提供不同的策略??梢园褍群斯δ軅魉偷綄S蒙疃攘魉€硬件電路中,它使用了流水線并行處理概念,在本質上就是多線程的。這些流水線的每一條都可以復制多次,與一條流水線相比,提供更強的并行處理功能。如圖5所示,可以通過級聯功能單元實現矢量加法內核,在OpenCL描述中實現每一操作,進行復制以滿足實際應用的吞吐量和延時要求。

       雖然所顯示的只是一個簡單表征,但每個功能單元都可以是深度流水線,以保證最終電路的工作頻率足夠高。此外,編譯器可以建立電路來管理與外部系統的通信。在這個例子中,DDRx控制器和PHY連接至內核,使其能夠高效訪問片外陣列。類似的,PCI Express?(PCIe?)IP自動例化,連接至內核,這樣,x86主機能夠通過OpenCLAPI與FPGA加速器進行通信。

在FPGA上實現OpenCL標準的優勢

       使用OpenCL描述來開發FPGA設計,與基于HDL設計的傳統方法相比,具有很多優勢。最顯著的優勢如圖6所示。開發軟件可編程器件的流程一般包括進行構思、在C等高級語言中對算法編程,然后使用自動編譯器來建立指令流。

       這一方法可以與傳統基于FPGA的設計方法相比。這里,設計人員的主要工作是對硬件按照每個周期進行描述,用于實現其算法。傳統流程涉及到建立數據通路,如圖7所示,通過狀態機來控制這些數據通路,使用系統級工具(例如,SOPCBuilder、PlatformStudio)連接至底層IP內核,由于必須要滿足外部接口帶來的約束,因此,需要處理時序收斂問題。OpenCL編譯器的目的是幫助設計人員自動完成所有這些步驟,使他們能夠集中精力定義算法,而不是重點關注乏味的硬件設計。以這種方式進行設計,設計人員很容易移植到新FPGA,性能更好,功能更強,這是因為OpenCL編譯器將相同的高級描述轉換為流水線,從而發揮了FPGA新器件的優勢。

案例:MonteCarloBlack-Scholes方法

       在金融市場上最重要的一個基準測試方法是通過Monte Carlo Black-Scholes方法計算期權價格。該方法基于對底層股票價格的隨機仿真,以及數百萬不同路徑上的平均預期收益。圖8以圖形化的方式顯示了這類仿真的一個例子。

       圖9顯示了進行這一計算的高級算法結構。首先采用Mersenne旋轉隨機數發生器來創建均勻分布的數值。將隨機數序列送入逆正態累積密度函數,以產生正態分布序列。然后,使用幾何布朗運動,這些隨機數用于仿真股票價格的變化。在每一仿真通路的最后,記錄看漲期權的收益,進行平均來產生收益預期值。整個算法通過大約300行的OpenCL代碼來實現,可以從FPGA移植到CPU、GPU。

 

       利用針對Altera FPGA開發的OpenCL工作臺,可以產生很好的基準測試結果,如表1所示。與相應的GPU相比,面向Stratix? IV FPGA EP4SGX530的OpenCL工作臺在吞吐量上超過了CPU和GPU。與相應的GPU相比,在執行相同的代碼時,FPGA解決方案不但提高了吞吐量,保守估計,功耗也只有其五分之一。速率和高功效相結合,降低了大計算量應用的功耗需求。

 

結論

       利用FPGA上的OpenCL標準,與目前的硬件體系結構(CPU、GPU,等)相比,能夠大幅度提高性能,同時降低了功耗。此外,與使用Verilog或者VHDL等底層硬件描述語言(HDL)的傳統FPGA開發方法相比,使用OpenCL標準、基于FPGA的混合系統(CPU+FPGA)具有明顯的產品及時面市優勢。Altera于2010年加入Khronos集團,為標準建設做出了積極貢獻。

原文轉自:http://www.ednchina.com/ART_8800501745_19_35499_AN_a996b8f4.HTM

posted @ 2012-11-22 22:00 jackdong 閱讀(616) | 評論 (0)編輯 收藏


 

 

Windows 操作系統之所以風靡世界,是因為其“易學易用”,從用戶的角度出發,讓數以萬計的非IT人員使用計算機實現娛樂,工作等目的。Windows 8繼承Windows桌面的優點,同時提供一種新的用戶體驗模式 - Windows store風格。換句話說,Windows 8操作系統存在兩種不同風格的應用。 本篇將介紹Windows 8應用框架以及開發工具的使用。

理解Windows 8應用框架

正如前文所說,Windows 8具有兩個不同風格的應用,Windows store應用和傳統Windows桌面應用。兩種風格應用使用不同的UI引擎,不同的服務和工具,以及不同的API. 但是,都運行在同一個Windows 8操作系統內核下。


 

我們簡單對比一下兩種應用:

 

Windows store

傳統Windows桌面應用

Windows store增加觸控操作,獨特的手勢操作,提高用戶體驗性

傳統桌面用主要操作模式是基于鼠鍵盤操作

用開基于.Net Framework Windows 8 API

用開基于Win32 API,或者Net Framework

Windows store用不推薦大量使用對話行人機交互,而推薦使用導航的模式進行交互,這種方式更象使用瀏覽器前進后退的功能進行交互。

傳統應用以對話主要人機交互方式

在部署方面,用不需要了解用安裝文件等信息,需要在Windows store下載安裝即可。

在部署方面,傳統桌面用需要一定的安裝和注冊流程

 

Windows 8傳統桌面應用框架

Windows 8傳統桌面應用可以根據分為三類,分別是Win32應用,.Net應用和HTML應用。

1. Win32應用主要開發語言為C,C++或VB。該應用被直接編譯為CPU代碼運行在Win32 API上,其用戶界面實現必須使用GDI或者GDI+。

2. .Net應用主要開發語言為C#,VB.NET。該應用被編譯為中間語言(IL),然后再被轉換為CPU代碼運行在CLR(Common Language Runtime)環境。其用戶界面實現使用XAML語言。

3. HTML應用主要開發語言為HTML/CSS和JavaScript,該應用基于瀏覽器運行。


 

 
 
 Windows store應用框架
 
基于相同的Windows 8操作系統內核,Windows Store應用共享相同的API層,稱為Windows Runtime APIs。無論使用C/C++,或者基于.Net的C#/VB.NET或者HTML5/JavaScript任何一種開發語言都可以輕松調用WinRT API類庫,實現本地應用操作。
值得一提的是,微軟綜合當前最流行的HTML5/CSS3/JavaScript技術,使Web開發人員可以輕松開發Windows store本地應用。另外,基于XAML的Silverlight和WPF技術都成為Windows 8操作系統部分,不再需要安裝插件支持。而Silverlight/WPF開發人員,可以繼續使用相關開發技能從事Windows Store應用開發。
 
 
 
Windows Runtime框架
 
從上面圖例可以看出,Windows Runtime是Windows 8應用框架重要組成部分之一。微軟將WinRT視為繼2002年.Net Framework發布后最大的革新。作為Windows Store應用設計和開發人員,從微軟設計原則考慮,Windows Runtime不僅僅是一套簡單的API類庫,而是一套獨立完整的能夠支持Windows Store應用風格的運行環境。
 

 
 
Windows Runtime的優點
 
1. WinRT運行在Windows 8核心層之上,為Windows Store應用提供API支持訪問本地資源,例如GPS,攝像頭,麥克等。
2. Windows Store應用運行在安全沙箱中,所以,該應用可以被認為安全的managed的應用。當應用嘗試使用未授權本地資源時,WinRT將提示用戶是否賦予系統存取權限。
3. 傳統Win32 API獨立于操作系統內核服務,而WinRT是Windows 8操作系統組成部分之一。 與Win32相比,WinRT更加穩定,其內存管理更加優化,對于應用和系統性能都有很大的提高。
4. WinRT支持本地異步操作,這是對于移動設備而言至關重要的特性。
 
語言映射層(Language Projection)
Windows 8應用支持多種開發語言,而不同開發語言,需要通過Language Projection映射到Windows Runtime運行環境,開發人員不需要擔心語言之間的轉換,整個過程都是編譯器自動完成。
值得一提的是,通過語言映射層,開發人員可以在同一個項目中使用不同的開發語言開發項目功能,在隨后的文章中,我將提供相應實例演示。
 
如何選擇Windows Store應用開發語言
對于Windows Store應用開發語言選擇,有以下幾個建議提供參考:
1. 對于具有Windows應用開發經驗的開發人員而言,C#和C++是最好的選擇,相比而言,C#基于.Net Framework,其應用為Managed,比較容易學習掌握。而C++更加貼近底層應用開發。
2. 對于具有Web應用開發經驗的設計和開發人員而言,HTML5/CSS3/JavaScript是最好的選擇。類似PhoneGap框架,Windows 8將提供一個Web Host承載運行編譯后的HTML應用,使其達到本地化的效果。
3. 對于具有宏操作經驗的開發人員而言,VB.Net是一個不錯的選擇,其應用開發與微軟Office VBA應用開發類似。
 
 
今天就說到這里。

學習XAML描述語言,請看:Windows 8 XAML實例教程系列


http://blog.csdn.net/jv9/article/details/8208209
posted @ 2012-11-22 21:04 jackdong 閱讀(363) | 評論 (0)編輯 收藏

Giovanni Manzini and Paolo Ferragina 吸取了前人多種經驗,結合n個算法,組建了最快的sa構建法.2005年新出的算法.是GNU開源項目,競賽中 1000萬的數據是 1 s,文件相當多,不能寫在博客里,linux源碼可以看:

http://www.mfn.unipmn.it/~manzini/lightweight

如果不會用,就下載本C++ 多串匹配程序包吧


下載程序


http://download.csdn.net/download/tiandyoin/1607178
posted @ 2012-11-20 15:21 jackdong 閱讀(421) | 評論 (0)編輯 收藏

http://www.bsdart.org/archives/20120117/623.html

FreeBSD 9.0 安裝入門教程

在 ftp 中看到了 9.0 的 release 安裝鏡像于是沒事 down 過來搗騰一下。貌似安裝過程有了新的變化,于是又了這個入門的東東,水平有限,歡迎指正,謝謝。

所有測試沒有使用物理機安裝,采用的是 VirtualBox 4.1.8 ,本人機器上面的 VM 版本過老,無法安裝。
硬件配置 內存分配了 512M 硬盤分配了 4G
CPU 是 intel 的 所以下載的是 I386 版本的

安裝開始
1、 安裝 log 界面換了

image

PS:實話說 那個東東我看了半天都木有分清楚是貓科類動物還是什么生物。

2、 選擇【1】安裝 10 秒默認安裝

3、 安裝界面確實不同了,開始估計會不習慣,不過沒關系,新的安裝其實更加簡單的。

image

3 個選項 第一安裝,第二個是shell 估計也可以用來安裝吧,水平有限木有嘗試,最后一個
是光盤鏡像系統,估計用來處錯使用的。
選擇【install】回車即可

4、詢問選擇鍵盤

image

無特殊要求 選擇【yes】

5、選擇鍵盤語言種類

image

默認吧

6、設置hostname

image

可以按 【esc】 跳過,建議設置

7、選擇需要安裝的資源
第一個是 doc 文檔估計是幫助文檔,說明文檔之類的
第二個是 games
第三個是ports 樹(建議不要選擇,安裝比較耗時,我用虛擬機安裝到最后報錯)
第四個是 src 源代碼唄。

image

按空格選擇 上下鍵移動

8、硬盤分區設置
第一個是安裝他的步驟引導操作
第二個應該是專家模式的
第三個是shell 模式

image

選擇【Guided】

9、配置分區
第一個是整個硬盤
第二個是選擇分區(木有嘗試成功)

image

選擇 【entire disk】

10、分區設置
若是以前安裝過早期版本的freebsd 估計這個懂的
你若是需要配置硬盤分區大小就在這里設置
一般是 auto 然后 finish

image

這個是數據提醒

image

配置好后 選擇 【finish】

11、選擇 提交 【commit】

image

12、格式化完就好開始驗證文件 然后 就開始安裝了
若是在 第7 步沒有選擇 games 和port 就只有兩項

image

開始安裝 比較耗時 如果選擇了 ports

image

13、安裝完開始系統配置

設置密碼

image

14、配置網卡

image

是否配置IPv4

image

是否DHCP 看個人需求配置

image

配置IP 地址

image

image

有配置IPV6 的選項

15、時間配置
在國內要配置時區

image

image

16、用戶配置
可以以后進行配置。

image

好差不多完成了
若是剛配置的有問題可以在這里可以進行綜合一點的配置。

image

如服務配置
可以開啟鼠標。

image

基本完成重啟吧。

image

附安裝后的圖片

image

提示若是不習慣使用新版本的安裝向導完全可以使用原來的安裝配置

只要 root 用戶輸入 sysinstall 即可

image

若是大牛說,新版本安裝方式很爛啊,完全不習慣怎么辦呢?
很簡單啦,在第3 部直接選擇 【shell】
然后輸入 sysinstall 嘿嘿,老的方式安裝,
水平有限,大家若是想用雞蛋砸我,真心請不要那樣。

By Ndk 2012-1-8
謝謝。
PS:哪天有時間折騰一個FreeBSD 9.0 + Gnome 的入門教程

轉載請注明文章轉載自:FreeBSD技術文摘 [http://www.bsdart.org]
本文鏈接地址:FreeBSD 9.0 安裝入門教程

所屬分類:新手資料

posted @ 2012-11-14 22:05 jackdong 閱讀(439) | 評論 (0)編輯 收藏

__stdcall,__cdecl區別簡介

__stdcall,__cdecl,_cdecl,_stdcall,。__fastcall,_fastcall 區別簡介

1.

今天寫線程函數時,發現msdn中對ThreadProc的定義有要求:DWORD WINAPI ThreadProc(LPVOID lpParameter);

不解為什么要用WINAPI宏定義,查了后發現下面的定義。于是乎需要區別__stdcall和__cdecl兩者的區別; #define CALLBACK __stdcall
#define WINAPI __stdcall
#define WINAPIV __cdecl
#define APIENTRY WINAPI
#define APIPRIVATE __stdcall
#define PASCAL __stdcall
#define cdecl _cdecl
#ifndef CDECL
#define CDECL _cdecl
#endif

幾乎我們寫的每一個WINDOWS API函數都是__stdcall類型的,首先,需要了解兩者之間的區別: WINDOWS的函數調用時需要用到棧(STACK,一種先入后出的存儲結構)。當函數調用完成后,棧需要清楚,這里就是問題的關鍵,如何清除??如果我們的函數使用了_cdecl,那么棧的清除工作是由調用者,用COM的術語來講就是客戶來完成的。這樣帶來了一個棘手的問題,不同的編譯器產生棧的方式不盡相同,那么調用者能否正常的完成清除工作呢?答案是不能。如果使用__stdcall,上面的問題就解決了,函數自己解決清除工作。所以,在跨(開發)平臺的調用中,我們都使用__stdcall(雖然有時是以 WINAPI的樣子出現)。那么為什么還需要_cdecl呢?當我們遇到這樣的函數如fprintf()它的參數是可變的,不定長的,被調用者事先無法知道參數的長度,事后的清除工作也無法正常的進行,因此,這種情況我們只能使用_cdecl。到這里我們有一個結論,如果你的程序中沒有涉及可變參數,最好使用__stdcall關鍵字。

2.

__cdecl,__stdcall是聲明的函數調用協議.主要是傳參和彈棧方面的不同.一般c++用的是__cdecl,windows里大都用的是__stdcall(API)

__cdecl是C/C++和MFC程序默認使用的調用約定,也可以在函數聲明時加上__cdecl關鍵字來手工指定。采用__cdecl約定時,函數參數按照從右到左的順序入棧,并且由調用函數者把參數彈出棧以清理堆棧。因此,實現可變參數的函數只能使用該調用約定。由于每一個使用 __cdecl約定的函數都要包含清理堆棧的代碼,所以產生的可執行文件大小會比較大。__cdecl可以寫成_cdecl。
__stdcall調用約定用于調用Win32 API函數。采用__stdcall約定時,函數參數按照從右到左的順序入棧,被調用的函數在返回前清理傳送參數的棧,函數參數個數固定。由于函數體本身知道傳進來的參數個數,因此被調用的函數可以在返回前用一條ret n指令直接清理傳遞參數的堆棧。__stdcall可以寫成_stdcall。
__fastcall約定用于對性能要求非常高的場合。__fastcall約定將函數的從左邊開始的兩個大小不大于4個字節(DWORD)的參數分別放在ECX和EDX寄存器,其余的參數仍舊自右向左壓棧傳送,被調用的函數在返回前清理傳送參數的堆棧。__fastcall可以寫成 _fastcall

3.

__stdcall:

_stdcall 調用約定相當于16位動態庫中經常使用的PASCAL調用約定。

 
在32位的VC++5.0中PASCAL調用約定不再被支持(實際上它已被定義為__stdcall。除了__pascal 外,__fortran和__syscall也不被支持),取而代之的是__stdcall調用約定。兩者實質上是一致的,即函數的參數自右向左通過棧傳遞,被調用的函數在返回前清理傳送參數的內存棧,但不同的是函數名的修飾部分(關于函數名的修飾部分在后面將詳細說明)。

_stdcall是Pascal程序的缺省調用方式,通常用于Win32 Api中,函數采用從右到左的壓棧方式,自己在退出時清空堆棧。VC將函數編譯后會在函數名前面加上下劃線前綴,在函數名后加上"@"和參數的字節數。

_cdecl:

_cdecl c調用約定, 按從右至左的順序壓參數入棧,由調用者把參數彈出棧。對于傳送參數的內存棧是由調用者來維護的(正因為如此,實現可變參數的函數只能使用該調用約定)。另外,在函數名修飾約定方面也有所不同。

_cdecl是C和C++程序的缺省調用方式。每一個調用它的函數都包含清空堆棧的代碼,所以產生的可執行文件大小會比調用_stdcall函數的大。函數采用從右到左的壓棧方式。VC將函數編譯后會在函數名前面加上下劃線前綴。是MFC缺省調用約定。

__fastcall:

__fastcall調用約定是"人"如其名,它的主要特點就是快,因為它是通過寄存器來傳送參數的(實際上,它用ECX和EDX傳送前兩個雙字(DWORD)或更小的參數,剩下的參數仍舊自右向左壓棧傳送,被調用的函數在返回前清理傳送參數的內存棧),在函數名修飾約定方面,它和前兩者均不同。

_fastcall方式的函數采用寄存器傳遞參數,VC將函數編譯后會在函數名前面加上"@"前綴,在函數名后加上"@"和參數的字節數。

thiscall:

thiscall僅僅應用于"C++"成員函數。this指針存放于CX寄存器,參數從右到左壓。thiscall不是關鍵詞,因此不能被程序員指定。

naked call:

采用1-4的調用約定時,如果必要的話,進入函數時編譯器會產生代碼來保存ESI,EDI,EBX,EBP寄存器,退出函數時則產生代碼恢復這些寄存器的內容。

naked call不產生這樣的代碼。naked call不是類型修飾符,故必須和_declspec共同使用。

另附:

關鍵字 __stdcall、__cdecl和__fastcall可以直接加在要輸出的函數前,也可以在編譯環境的Setting...\C/C++ \Code Generation項選擇。當加在輸出函數前的關鍵字與編譯環境中的選擇不同時,直接加在輸出函數前的關鍵字有效。它們對應的命令行參數分別為/Gz、 /Gd和/Gr。缺省狀態為/Gd,即__cdecl。

要完全模仿PASCAL調用約定首先必須使用__stdcall調用約定,至于函數名修飾約定,可以通過其它方法模仿。還有一個值得一提的是 WINAPI宏,Windows.h支持該宏,它可以將出函數翻譯成適當的調用約定,在WIN32中,它被定義為__stdcall。使用WINAPI宏可以創建自己的APIs。

名字修飾約定

1、修飾名(Decoration name)
“C”或者“C++”函數在內部(編譯和鏈接)通過修飾名識別。修飾名是編譯器在編譯函數定義或者原型時生成的字符串。有些情況下使用函數的修飾名是必要的,如在模塊定義文件里頭指定輸出“C++”重載函數、構造函數、析構函數,又如在匯編代碼里調用“C””或“C++”函數等。

修飾名由函數名、類名、調用約定、返回類型、參數等共同決定。

2、名字修飾約定隨調用約定和編譯種類(C或C++)的不同而變化。函數名修飾約定隨編譯種類和調用約定的不同而不同,下面分別說明。

a、C編譯時函數名修飾約定規則:

__stdcall調用約定在輸出函數名前加上一個下劃線前綴,后面加上一個“@”符號和其參數的字節數,格式為_functionname@number。

__cdecl調用約定僅在輸出函數名前加上一個下劃線前綴,格式為_functionname。

__fastcall調用約定在輸出函數名前加上一個“@”符號,后面也是一個“@”符號和其參數的字節數,格式為@functionname@number。

它們均不改變輸出函數名中的字符大小寫,這和PASCAL調用約定不同,PASCAL約定輸出的函數名無任何修飾且全部大寫。

b、C++編譯時函數名修飾約定規則:

__stdcall調用約定:
1、以“?”標識函數名的開始,后跟函數名;
2、函數名后面以“@@YG”標識參數表的開始,后跟參數表;
3、參數表以代號表示:
X--void ,
D--char,
E--unsigned char,
F--short,
H--int,
I--unsigned int,
J--long,
K--unsigned long,
M--float,
N--double,
_N--bool,
....
PA--表示指針,后面的代號表明指針類型,如果相同類型的指針連續出現,以“0”代替,一個“0”代表一次重復;
4、參數表的第一項為該函數的返回值類型,其后依次為參數的數據類型,指針標識在其所指數據類型前;
5、參數表后以“@Z”標識整個名字的結束,如果該函數無參數,則以“Z”標識結束。

其格式為“?functionname@@YG*****@Z”或“?functionname@@YG*XZ”,例如
int Test1(char *var1,unsigned long)-----“?Test1@@YGHPADK@Z”
void Test2() -----“?Test2@@YGXXZ”

__cdecl調用約定:
規則同上面的_stdcall調用約定,只是參數表的開始標識由上面的“@@YG”變為“@@YA”。

__fastcall調用約定:
規則同上面的_stdcall調用約定,只是參數表的開始標識由上面的“@@YG”變為“@@YI”。
VC++對函數的省缺聲明是“__cedcl“,將只能被C/C++調用.

CB在輸出函數聲明時使用4種修飾符號
//__cdecl
cb的默認值,它會在輸出函數名前加_,并保留此函數名不變,參數按照從右到左的順序依次傳遞給棧,也可以寫成_cdecl和cdecl形式。
//__fastcall
她修飾的函數的參數將盡肯呢感地使用寄存器來處理,其函數名前加@,參數按照從左到右的順序壓棧;
//__pascal
它說明的函數名使用Pascal格式的命名約定。這時函數名全部大寫。參數按照從左到右的順序壓棧;
//__stdcall
使用標準約定的函數名。函數名不會改變。使用__stdcall修飾時。參數按照由右到左的順序壓棧,也可以是_stdcall;

VC++對函數的省缺聲明是"__cedcl",將只能被C/C++調用.





注意:

1、_beginthread需要__cdecl的線程函數地址,_beginthreadex和CreateThread需要__stdcall的線程函數地址。

2、一般WIN32的函數都是__stdcall。而且在Windef.h中有如下的定義:

#define CALLBACK __stdcall

#define WINAPI  __stdcall

3、extern "C" _declspec(dllexport) int __cdecl Add(int a, int b);

   typedef int (__cdecl*FunPointer)(int a, int b);

   修飾符的書寫順序如上。

4、extern "C"的作用:如果Add(int a, int b)是在c語言編譯器編譯,而在c++文件使用,則需要在c++文件中聲明:extern "C" Add(int a, int b),因為c編譯器和c++編譯器對函數名的解釋不一樣(c++編譯器解釋函數名的時候要考慮函數參數,這樣是了方便函數重載,而在c語言中不存在函數重載的問題),使用extern "C",實質就是告訴c++編譯器,該函數是c庫里面的函數。如果不使用extern "C"則會出現鏈接錯誤。

一般象如下使用:

#ifdef _cplusplus

#define EXTERN_C extern "C"

#else

#define EXTERN_C extern

#endif

#ifdef _cplusplus

extern "C"{

#endif

EXTERN_C int func(int a, int b);

#ifdef _cplusplus

}

#endif

5、MFC提供了一些宏,可以使用AFX_EXT_CLASS來代替__declspec(DLLexport),并修飾類名,從而導出類,AFX_API_EXPORT來修飾函數,AFX_DATA_EXPORT來修飾變量

AFX_CLASS_IMPORT:__declspec(DLLexport)

AFX_API_IMPORT:__declspec(DLLexport)

AFX_DATA_IMPORT:__declspec(DLLexport)

AFX_CLASS_EXPORT:__declspec(DLLexport)

AFX_API_EXPORT:__declspec(DLLexport)

AFX_DATA_EXPORT:__declspec(DLLexport)

AFX_EXT_CLASS:#ifdef _AFXEXT

   AFX_CLASS_EXPORT

        #else

   AFX_CLASS_IMPORT

6、DLLMain負責初始化(Initialization)和結束(Termination)工作,每當一個新的進程或者該進程的新的線程訪問DLL時,或者訪問DLL的每一個進程或者線程不再使用DLL或者結束時,都會調用DLLMain。但是,使用TerminateProcess或 TerminateThread結束進程或者線程,不會調用DLLMain。

7、一個DLL在內存中只有一個實例

DLL程序和調用其輸出函數的程序的關系:

1)、DLL與進程、線程之間的關系

DLL模塊被映射到調用它的進程的虛擬地址空間。

DLL使用的內存從調用進程的虛擬地址空間分配,只能被該進程的線程所訪問。

DLL的句柄可以被調用進程使用;調用進程的句柄可以被DLL使用。

DLLDLL可以有自己的數據段,但沒有自己的堆棧,使用調用進程的棧,與調用它的應用程序相同的堆棧模式。

2)、關于共享數據段

DLL定義的全局變量可以被調用進程訪問;DLL可以訪問調用進程的全局數據。使用同一DLL的每一個進程都有自己的DLL全局變量實例。如果多個線程并發訪問同一變量,則需要使用同步機制;對一個DLL的變量,如果希望每個使用DLL的線程都有自己的值,則應該使用線程局部存儲 (TLS,Thread Local Strorage)。

http://blog.sina.com.cn/s/blog_494e45fe0100l4wv.html
posted @ 2012-11-14 11:03 jackdong 閱讀(524) | 評論 (0)編輯 收藏

7z.exe在CMD窗口的使用說明如下:

7-Zip (A) 4.57 Copyright (c) 1999-2007 Igor Pavlov 2007-12-06

Usage: 7za <command> [<switches>...] <archive_name> [<file_names>...]
[<@listfiles...>]

<Commands>
a: Add files to archive
b: Benchmark
d: Delete files from archive
e: Extract files from archive (without using directory names)
l: List contents of archive
t: Test integrity of archive
u: Update files to archive
x: eXtract files with full paths
<Switches>
-ai[r[-|0]]{@listfile|!wildcard}: Include archives
-ax[r[-|0]]{@listfile|!wildcard}: eXclude archives
-bd: Disable percentage indicator
-i[r[-|0]]{@listfile|!wildcard}: Include filenames
-m{Parameters}: set compression Method
-o{Directory}: set Output directory
-p{Password}: set Password
-r[-|0]: Recurse subdirectories
-scs{UTF-8 | WIN | DOS}: set charset for list files
-sfx[{name}]: Create SFX archive
-si[{name}]: read data from stdin
-slt: show technical information for l (List) command
-so: write data to stdout
-ssc[-]: set sensitive case mode
-ssw: compress shared files
-t{Type}: Set type of archive
-v{Size}[b|k|m|g]: Create volumes
-u[-][p#][q#][r#][x#][y#][z#][!newArchiveName]: Update options
-w[{path}]: assign Work directory. Empty path means a temporary directory
-x[r[-|0]]]{@listfile|!wildcard}: eXclude filenames
-y: assume Yes on all queries

中文使用說明如下:

語法
2 U: }* K- X4 U# @   p% Q2 E/ x7z <命令行> [<選項>...] <基本檔案名稱> [<參數變量>...]

# N, x! L1 @8 c# f# A( {- H: c1 k7z <command> [<switch>...] <base_archive_name> [<arguments>...]* g8 T1 {- l2 e) P% T' V; A
<參數變量> ::= <選項> | <通配符> | <文件名> | <文件列表>
0 \4 K+ d( V+ \9 b7 n9 Z! n7 m<選項>::= <選項標記><選項字符>[<選項>]
3 Y3 P   u3 ]7 z<選項標記> ::= '/' | '-'
2 T9 p3 F+ k2 m+ i<文件列表> ::= @{文件名}
( @4 _; F   r6 j. t+ a5 @

( h) M. w' f: W: B" n<arguments> ::= <switch> | <wildcard> | <filename> | <list_file>
) E" E* I9 a3 L' \' H5 U<switch>::= <switch_symbol><switch_characters>[<option>]
5 ]# @$ ^+ h% E( h8 B& o<switch_symbol> ::= '/' | '-'
7 ?7 T" n   v. b; ^( z<list_file> ::= @{filename}
8 i/ v   Z4 S3 {# ?在方括號內的表達式(“[” 和 “]”之間的字符)是可選的。' ?2 k0 k/ m* f. Q$ c4 h
在書名號內的表達式(“<” 和 “>”之間的字符)是必須替換的表達式(而且要去掉括號)。
, F8 d* c0 \# u5 l0 p表達式
5 S; l2 |, I1 v/ Texpression1 | expression2 | ... | expressionN* R- s: |- P/ n& m9 C
命令行 及 選項 使用大寫或小寫字母都可以。
$ C+ b   `' R6 r/ O6 ~0 l. q! P# A- W首個命令行必須是無選項的參數變量。
& x- x- e! h( T( _; l. w) D選項及其它文件名的輸入順序可以打亂。
% }* U" G6 f5 b/ u1 h2 W* t帶有空格的通配符或文件名必須加上引號:
& E. _# e( t9 Q0 q/ t"Dir\Program files\*"+ r+ u2 k   b' Z& U. n
Dir\"Program files"\*. M   R   V3 S/ s
通配符是一個鍵盤字符,例如星號(*)或問號(?),當執行添加文件、釋放文件、選定文件、刪除文件等操作時,您可以使用它來代表一個或多個字符。當您不知道真正字符或者不想鍵入完整名稱時,常常使用通配符代替一個或多個字符。
' b   s0 b, V" `' T8 G' K7-Zip 支持和 Windows 相類似的通配符:
. |   r) x% ?9 a! A% r“*”可以使用星號代替零個或多個字符。
" T! c' q: o3 v+ ]8 u" F“?”可以用問號代替名稱中的單個字符。
2 p9 F% Y1 ]4 o; H2 W4 ]7-Zip 使用的并不是系統處理通配符的默認方法,因而 7-Zip 不支持其它通配符規則,在系統中 *.* 相當于所有文件。而 7-Zip 會將其視為任何擴展名的全部文件。所以,要處理所有文件您必須使用 * 通配符。
& t' b7 R   U4 L! u1 `. m示例:
( r, |* b' R# h* \*.txt 這樣會查找(添加、選定……)所有擴展名是“.txt”的文件 / z9 x0 }' d, B, s# z
?a* 這樣會查找(添加、選定……)所有第二個字母為“a”的文件 / f+ ^8 N7 S% b. b' Q
*1* 這樣會查找(添加、選定……)所有包含“1”的文件 3 W# Q" f   C* h   E6 n
*.*.* 這樣會查找(添加、選定……)所有包含“.”的雙擴展名文件
5 _, W& N( ]2 P* Z! Z' S如果在命令行中沒有文件名,系統將會使用默認通配符“*”。* K. J# R7 u) w7 n3 A6 ?
檔案文件中通配符及文件名的使用限制:
/ A( C# e1 B4 b* ]1 B通配符及文件名不能包括系統盤符或網址。每個通配符及文件名路徑將被視為從盤符到當前目錄的完整路徑/從壓縮檔案的根目錄算起的完整路徑。換句話說,路徑的開始部分(在首個斜線(“\”)之前的字符)必須是某個名稱或通配符。 1 [% e: w/ V/ g, l" t0 N
通配符及文件名不能以斜線(“\”)結尾。
% t( K0 ?! L. K: L* U8 n5 G6 t通配符只可以在完整路徑的最后一部分中出現。 ' M) Q' ~9 v2 O; m2 I9 _$ G2 D, U" b
示例:
* n. o9 Y* u. f   N- q# @% TDir1\*.cpp 正確
' o. P$ _   i& D7 Y8 dc:\Dir1\*.cpp 錯誤:路徑中不能包括盤符
! c" A. z7 f) T4 H6 YDir1\Dir2\g?.txt 正確 ; i7 Q+ P) e2 F8 g
Dir1\D?r2\file1.txt 錯誤:只有在以路徑的最后一部分才能使用通配符
; M( k3 A! C+ \+ L8 C- C# W6 q文件列表: l   Z$ }; P4 O
您可以使用文件列表來對要操作的文件進行批量操作。在文件中的文件名必須用空格或另起一行隔開。(如使用空格格開,每一個文件必須加引號)。
- e1 A" |( j' h( y) T$ p7-Zip 命令行支持多個文件列表同時操作。2 Y+ k2 G9 |2 g: p. x2 M' Z
舉個例子,這里有一個文件列表“listfile.txt”包含下列內容:" I! Z) }. C7 k/ H4 g; u' @+ Q
"My programs\*.cpp"5 v; @* F) U5 ]$ k3 H6 J! b* N
Src\*.cpp
% ^   C   }8 b) ?; I7 w那么我們可以輸入命令:
) t, u4 \" G4 |1 s7z a -tzip archive.zip @listfile.txt
9 @   h/ N. X' Q將“My programs”及“Src”目錄中所有擴展名為“cpp”的文件添加到壓縮檔案“archive.zip”中。
& }7 _" |7 x8 N
) ^9 ?, s: b) C& f   M9 F
6 Y! V3 f* A   h+ R. X* a" B3 q命令行
+ \- g+ r7 t$ S6 X2 c命令行的命令不分大小寫。
6 V. I: [5 H% ]1 Y4 ~+ I7 j; f更多有關命令行的詳細內容請參閱 語法。
6 Q3 L/ k' p* _( Z; X命令要點參考
# R3 h4 r/ ^- X命令 作用說明
( M7 t) Y8 F. z! qa 添加 . M% Z1 A/ G8 y: S9 d* c
d 刪除 : j9 _   _2 ~$ W, W2 m: U
e 釋放 - Y7 {! I   _( K$ y
l 列表 4 w& j5 K   X4 }+ Y# A) d* k: S
t 測試 . h: w& C4 ~- P* o+ @
u 更新
; g: ?+ R9 N' v. ~6 F9 }: yx 完整路徑釋放
; w* a( q+ p+ F& `- O( ]   M. T' k   x0 `
命令行選項/ }1 o6 h9 v9 B2 V9 |9 q' R. y
語法   V* Y, `+ p( K5 b
<選項>::= <選項_符號><選項_字符>[<選項>]
. m# e- \9 [$ r( F<選項_符號> ::= '/' | '-'
- L$ X5 m# O' d3 V&ltswitch>::= <switch_symbol><switch_characters>[<option>]
* u9 h2 \6 Y9 f<switch_symbol> ::= '/' | '-'
3 D; h. [9 g0 W3 N( d在命令行中,一個完整的選項由指定的選項、連字符(-)或斜線(/)組成,而且選項的符號不能使用縮寫。, q$ P! D- o" H   b" w/ Y3 _# D
選項名稱不區分大小寫。而一部分選項會包括參數變量,它們是需要區分大小寫的。
, [7 {6 e! b; m. E2 L1 k5 U% l% b選項可以使用在命令行中的任何位置。#
( h) M. w' f: W: B" n) E" E* I9 a3 L' \' H5 U5 ]# @$ ^+ h% E( h8 B& o7 ?7 T" n   v. b; ^( z8 i/ v   Z4 S3 {# ?, F8 d* c0 \# u5 l0 p5 S; l2 |, I1 v/ T$ C+ b   `' R6 r/ O6 ~0 l. q! P# A- W& x- x- e! h( T( _; l. w) D% }* U" G6 f5 b/ u1 h2 W* t& E. _# e( t9 Q0 q/ t' b   s0 b, V" `' T8 G' K. |   r) x% ?9 a! A% r" T! c' q: o3 v+ ]8 u" F2 p9 F% Y1 ]4 o; H2 W4 ]& t' b7 R   U4 L! u1 `. m( r, |* b' R# h* \5 _, W& N( ]2 P* Z! Z' S/ A( C# e1 B4 b* ]1 B% t( K0 ?! L. K: L* U8 n5 G6 t* n. o9 Y* u. f   N- q# @% T' o. P$ _   i& D7 Y8 d! c" A. z7 f) T4 H6 Y; M( k3 A! C+ \+ L8 C- C# W6 q- e1 A" |( j' h( y) T$ p% ^   C   }8 b) ?; I7 w) t, u4 \" G4 |1 s9 @   h/ N. X' Q& }7 _" |7 x8 N) ^9 ?, s: b) C& f   M9 F6 Y! V3 f* A   h+ R. X* a" B3 q+ \- g+ r7 t$ S6 X2 c6 V. I: [5 H% ]1 Y4 ~+ I7 j; f6 Q3 L/ k' p* _( Z; X# R3 h4 r/ ^- X( M7 t) Y8 F. z! q; g: ?+ R9 N' v. ~6 F9 }: y; w* a( q+ p+ F. m# e- \9 [$ r( F- L$ X5 m# O' d3 V* u9 h2 \6 Y9 f3 D; h. [9 g0 W3 N( d, [7 {6 e! b; m. E2 L1 k5 U% l% b#

 

參考greegree的文章先給出一個壓縮文件的例子:

7z a -t7z archive.7z *.exe *.dll -m0=BCJ -m1=LZMA:d=21 -ms -mmt

    添加 *.exe 及 *.dll 文件到固實壓縮檔案 archive.7z。使用 LZMA 壓縮算法、2 MB 字典大小及 BCJ 轉換器。壓縮將開啟多線程優化(如果可用)。

   -ms 默認設置固實模式。在創建固實壓縮檔案模式中,它把壓縮檔案中的所有文件都當成一個連續數據流來看待。通常情況下,固實壓縮可增加壓縮比,特別是在添加大量小文件的時候
-mmt 默認開啟多線程模式。   
以上兩條倒是可以理解,但是“-m0=BCJ -m1=LZMA:d=21 ”又該如何解釋?
按照給出的中文的文檔說明:
-m0=BCJ -- 第一個備選的壓縮算法為BCJ
-m1=LZMA:d=21 -- 第二個備選的壓縮算法為LZMA,指定字典大小為默認的21(2MB的1次方)2MB。

 

如果:想要使用最大化壓縮,可以使用下面的參數選項:

    7z a -t7z DriverTest_1.7z "I:\t\t1\*" -mx=9 -ms=200m -mf -mhc -mhcf -m0=LZMA:a=2:d=25:mf=bt4b:fb=64 -mmt -r

-t7z -- 壓縮文件的格式為7z
-mx=9 -ms=200m -mf -mhc -mhcf -m0=LZMA:a=2:d=25:mf=bt4b:fb=64 -mmt
-- 指定壓縮算法選項
-mx=9 -- 設置壓縮等級為極限壓縮(默認為:LZMA 最大算法、32 MB 字典大小、BT4b Match finder、單詞大小為 64、BCJ2 過濾器)
-ms=200m -- 開啟固實模式,設置固實數據流大小為200MB。
-mf -- 開啟可執行文件壓縮過濾器。
-mhc -- 開啟檔案文件頭壓縮。
-mhcf -- 開啟檔案文件頭完全壓縮。我所使用的7z版本為4.42>2.30。
-m0=LZMA:a=2:d=25:mf=bt4b:fb=64
-- 第一個備選壓縮算法為LZMA,壓縮等級為最大壓縮,LZMA算法使用的字典大小為25(2MB的5次方)32MB,算法的匹配器為bt4b(所需要內存為d×9.5 + 34 MB),壓縮算法的緊湊字節為最大模式的64字節。
-mmt -- 開啟多線程模式。
-r -- 遞歸到所有的子目錄。

7z命令解壓文件的例子:解壓File.7z文件到目錄Mydir。

7z x "d:\File.7z" -y -aos -o"d:\Mydir"

參數說明:

x:完整路徑下解壓文件

-y:所有確認選項都默認為是(即不出現確認提示)

-aos:跳過已存在的文件

-o:設置輸出目錄

關于內存的使用:

一般來說,WindowsXP至少使用80~160MB的內存,為了保證系統的運行正常,還要留夠32MB的剩余物理內存。
所以如果是512MB的內存,那么7z壓縮所使用的內存為(512-32-160)320MB,使用bt4b(d*9.5+34MB),所以d=32MB。
如果是256MB的內存,那么7z壓縮所使用的內存為(256-32-120)104MB,使用bt4b(d*9.5+34MB),所以d=8MB。
由此可見,在WindowsXP的圖形界面下要想得到更大的壓縮比,或者擴大物理內存的容量,或者可以采用在DOS下運行32位程序的方法;否則無論你的虛擬內存或者系統的磁盤緩存設置得再大,只能看見硬盤燈狂閃得交換頁面文件。
通常情況下,較大的字典文件能提供較高的壓縮比。但是在壓縮和解壓縮的時候會比較慢而且需要較多的物理內存:壓縮時所使用的物理內存約為字典文件的10倍,解壓縮時所使用的物理內存約等于字典文件大小。

語法格式:(詳細情況見7-zip幫助文件,看得頭暈可以跳過,用到再學)
7z <command> [<switch>...] <base_archive_name> [<arguments>...]

7z.exe的每個命令都有不同的參數<switch>,請看幫助文件
<base_archive_name>為壓縮包名稱
<arguments>為文件名稱,支持通配符或文件列表
a: 添加文件的壓縮包,或者創建新的壓縮包。

d: 從壓縮包中刪除文件。

e: 從壓縮包中提取。

t: 測試壓縮包的是否出錯。

u: 更新壓縮包中的文件。
其中,7z是至命令行壓縮解壓程序7z.exe,<command>是7z.exe包含的命令,列舉如下:

a: Adds files to archive. 添加至壓縮包
a命令可用參數:
-i (Include)
-m (Method)
-p (Set Password)
-r (Recurse)
-sfx (create SFX)
-si (use StdIn)
-so (use StdOut)
-ssw (Compress shared files)
-t (Type of archive)
-u (Update)
-v (Volumes)
-w (Working Dir)
-x (Exclude)


b: Benchmark

d: Deletes files from archive. 從壓縮包中刪除文件
d命令可用參數:
-i (Include)
-m (Method)
-p (Set Password)
-r (Recurse)
-u (Update)
-w (Working Dir)
-x (Exclude)

e: Extract解壓文件至當前目錄或指定目錄
e命令可用參數:
-ai (Include archives)
-an (Disable parsing of archive_name)
-ao (Overwrite mode)
-ax (Exclude archives)
-i (Include)
-o (Set Output Directory)
-p (Set Password)
-r (Recurse)
-so (use StdOut)
-x (Exclude)
-y (Assume Yes on all queries)

l: Lists contents of archive.
t: Test
u: Update

x: eXtract with full paths用文件的完整路徑解壓至當前目錄或指定目錄
x命令可用參數:
-ai (Include archives)
-an (Disable parsing of archive_name)
-ao (Overwrite mode)
-ax (Exclude archives)
-i (Include)
-o (Set Output Directory)
-p (Set Password)
-r (Recurse)
-so (use StdOut)
-x (Exclude)
-y (Assume Yes on all queries)
-m (Set compression Method) switch
Specifies the compression method.


用7-ZIP實現批處理 命令行壓縮和解壓功能

編輯一個.bat文件;每行這樣寫,就可以連續壓制多個目錄了
7z a -mx9 -md64m -mfb=273 -slp -ssw -v1024m -mmt=2 -r
{路徑及7z檔名} {路徑及要壓縮的文件名及路徑 可以空格填多個}

例子:建議以成對雙引號來包壓縮檔名和路徑名
7z a -mx9 -md64m -mfb=273 -slp -ssw -v1024m "game" "d:\game\*.*"
把d:\game\ 以ultra模式 64m字典fb273 每分卷1024m模式壓縮

-mxN N=0~9 ;壓縮模式選擇
Level Method Dictionary FastBytes MatchFinder Filter Description
0 Copy No compression.
1 LZMA 64 KB 32 HC4 BCJ Fastest compressing
3 LZMA 1 MB 32 HC4 BCJ Fast compressing
5 LZMA 16 MB 32 BT4 BCJ Normal compressing
7 LZMA 32 MB 64 BT4 BCJ Maximum compressing
9 LZMA 64 MB 64 BT4 BCJ2 Ultra compressing -mdNm 填字典大小 比如填26 和填64m一樣的;看說明更大內存也可以填,比如128m字典
最大1024m

The maximum value for dictionary size is 1 GB = 2^30 bytes. Default values for LZMA are 24 (16 MB) in normal mode, 25 (32 MB) in maximum mode (-mx=7) and 26 (64 MB) in ultra mode (-mx=9).

-mfb=N 填fastbytes大小,此數字增大會稍微加大壓縮但減慢速度

-slp (Set Large Pages mode);會加快壓縮,但開始會卡下,This feature works only on Windows 2003 / XP x64

-ssw 也壓縮共享文件

-v (Create Volumes) switch
Specifies volume sizes.
Syntax
-v{Size}[b | k | m | g]

-mmt=N 多核選項,比如雙核填2


命令行壓縮解壓一 7z

1) 簡介
7z,全稱7-Zip, 是一款開源軟件。是目前公認的壓縮比例最大的壓縮解壓軟件。
主頁:http://www.7-zip.org/
中文主頁:http://7z.sparanoid.com/
命令行版本下載:http://7z.sparanoid.com/download.html
主要特征:
# 全新的LZMA算法加大了7z格式的壓縮比
# 支持格式:
* 壓縮 / 解壓縮:7z, XZ, BZIP2, GZIP, TAR, ZIP
* 僅解壓縮:ARJ, CAB, CHM, CPIO, DEB, DMG, FAT, HFS, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, RAR, RPM, UDF, VHD, WIM, XAR, Z

2)退出代碼
0 : 正常,沒有錯誤;
1 : 警告,沒有致命的錯誤,例如某些文件正在被使用,沒有被壓縮;
2 : 致命錯誤;
7 : 命令行錯誤;
8 : 沒有足夠的內存;
255 : 用戶停止了操作;

3)使用語法
7z <命令行> [<選項>...] <基本檔案名稱> [<參數變量>...]

在方括號內的表達式(“[” 和 “]”之間的字符)是可選的。
在書名號內的表達式(“<” 和 “>”之間的字符)是必須替換的表達式(而且要去掉括號)。

7-Zip 支持和 Windows 相類似的通配符:
“*”可以使用星號代替零個或多個字符。
“?”可以用問號代替名稱中的單個字符。
如果只用*,7-Zip 會將其視為任何擴展名的全部文件。

4)命令及實例

a 添加文件到壓縮檔案。
7z a archive1.zip subdir\ :增加subdir文件夾下的所有的文件和子文件夾到archive1.zip中,archived1.zip中的文件名包含subdir\前綴。
7z a archive2.zip .\subdir\* :增加subdir文件夾下的所有的文件和子文件夾到archive1.zip中,archived2.zip中的文件名不包含subdir\前綴。
cd /D c:\dir1\
7z a c:\archive3.zip dir2\dir3\ :archiive3.zip中的文件名將包含dir2\dir3\前綴,但是不包含c:\dir1前綴。
7z a Files.7z *.txt -r : 增加當前文件夾及其子文件夾下的所有的txt文件到Files.7z中。

b 測試 CPU 運行速度及檢查內存錯誤。

d 從壓縮檔案刪除文件。
7z d archive.zip *.bak -r :從archive.zip中刪除所有的bak文件。

e 從壓縮檔案中釋放文件到當前目錄中?;蛘叩街付ǖ妮敵鑫募A。輸出文件夾設置可以通過 -o (設置輸出文件夾) 選項來更改。此命令會將所有被釋放的文件放置到一個文件夾。如果您想使用完整路徑釋放文件,您必須使用 x (完整路徑釋放) 命令。
7z e archive.zip :從壓縮檔案 archive.zip 中釋放所有文件到當前文件夾。
7z e archive.zip -oc:\soft *.cpp :從壓縮檔案 archive.zip 中釋放 *.cpp 文件到 c:\soft 文件夾。

l 列出壓縮檔案內容。
7z l archive.zip :列出壓縮檔案 archive.zip 的內容。

t 測試壓縮檔案文件的完整性。
7z t archive.zip *.doc :在壓縮檔案 archive.zip 中測試 *.doc 文件的完整性。

u 在壓縮檔案文件中使用較新的文件替換掉較舊的文件。
7z u archive.zip *.doc :在壓縮檔案 archive.zip 中更新 *.doc 文件。

x 在當前目錄中,使用完整路徑從壓縮檔案中釋放文件.或者到指定的輸出文件夾。
7z x archive.zip :從壓縮檔案 archive.zip 中釋放所有文件到當前文件夾。
7z x archive.zip -oc:\soft *.cpp :從壓縮檔案 archive.zip 中釋放 *.cpp 文件到 c:\soft 文件夾。

5)更多的選項

-- 在命令行中使“--”后的選項開關“-”都失效。這樣就允許在命令行中使用文件名以“-”開頭的文件。
7z t -- -ArchiveName.7z :測試 -ArchiveName.7z 壓縮檔案.

-i指定壓縮時附加文件或一類文件。此選項可附件添加多個類型。
i[<recurse_type>]<file_ref> 其中<recurse_type>為可以為r[- | 0](具體的-r選項見后面-r),<file_ref>可以為@{listfile} | !{wildcard}。
7z a -tzip src.zip *.txt -ir!DIR1\*.cpp :從當前目錄中添加 *.txt 文件,和 DIR1 目錄及其子目錄中的 *.cpp 文件到 src.zip 壓縮檔案。

-x 指定某一文件或某一類文件從操作中排除。此選項可同時排除多個類型。
x[<recurse_type>]<file_ref> 其中<recurse_type>為可以為r[- | 0](具體的-r選項見后面-r),<file_ref>可以為@{listfile} | !{wildcard}。
7z a -tzip archive.zip *.txt -x!temp.* :添加除 temp.* 文件之外的所有 *.txt 文件到壓縮檔案 archive.zip。

-o 指定釋放文件的輸出文件夾。此選項只能和釋放命令配合使用。
7z x archive.zip -oc:\Doc :從 archive.zip 壓縮檔案釋放所有文件到 c:\Doc 文件夾。

-r 遞歸子目錄選項。
-r 開啟遞歸子目錄。對于 e (釋放)、l (列表)、t (測試)、x (完整路徑釋放) 這些在壓縮檔案中操作的命令, 會默認使用此選項。
-r- 關閉遞歸子目錄。對于 a (添加)、d (刪除)、u (更新) 等所有需掃描磁盤文件的命令,會默認使用此選項。
-r0 開啟遞歸子目錄。但只應用于通配符。
7z l archive.zip -r- *.doc :列出在 archive.zip 壓縮檔案中根目錄下的 *.doc 文件。
7z a -tzip archive.zip -r src\*.cpp src\*.h :將 src 目錄及其子目錄中的 *.cpp 及 *.h 文件添加到 archive.zip 壓縮檔案。

-t 指定壓縮檔案格式。指定壓縮檔案格式。它們可以是:zip、7z、rar、cab、gzip、bzip2、tar 或其它格式。而 默認值是 7z 格式。
7z a -tzip archive.zip *.txt :使用 zip 格式從當前目錄中添加所有 *.txt 文件到壓縮檔案 archive.zip。

-y 使 7-Zip 執行命令時的大多數提示失效。您可以使用此選項來阻止在 e (釋放) 和 x (完整路徑釋放) 命令中文件覆蓋時的提示。
7z x src.zip -y :從 src.zip 釋放所有文件。所有的覆蓋提示將被阻止且所有相同文件名的文件將被覆蓋。

-v指定分卷大小。
{Size}[b | k | m | g]
指定分卷大小,可以使用字節、KB(1 KB=1024 字節),MB(1 MB = 1024 KB)或 GB(1 GB = 1024 MB)。如果您只指定了 {Size},7-zip 將把它視為字。
7z a a.7z *.txt -v10k -v15k -v2m : 創建 a.7z 分卷壓縮檔案。第一個分卷為 10 KB,第二個為 15 KB,剩下全部為 2 MB。

-p 指定密碼。
7z x archive.zip -psecret :將設有密碼“secret”的壓縮檔案 archive.zip 中所有文件釋放。

-ao 指定在釋放期間如何覆蓋硬盤上現有的同名文件。
語法:-ao[a | s | u ]
-aoa 直接覆蓋現有文件,而沒有任何提示。
-aos 跳過現有文件,其不會被覆蓋。
-aou 如果相同文件名的文件以存在,將自動重命名被釋放的文件。舉個例子,文件 file.txt 將被自動重命名為 file_1.txt。
-aot 如果相同文件名的文件以存在,將自動重命名現有的文件。舉個例子,文件 file.txt 將被自動重命名為 file_1.txt。
7z x test.zip -aoa :從壓縮檔案 test.zip 中釋放所有文件并卻不做提示直接覆蓋現有文件。

-an 不解析命令行中的 archive_name 區域。此選項必須和 -i (附加文件) 開關一起使用。比如您為壓縮檔案使用列表文件,您就需要指定 -ai 選項,所以您需要禁止解析命令行中的 archive_name 區域。
實例見后面的-ai和-ax中。

-ai 指定附加文件,包括壓縮檔案文件名及通配符。此選項可同時附加多個類型。
ai[<recurse_type>]<file_ref> 其中<recurse_type>為可以為r[- | 0](具體的-r選項見后面-r),<file_ref>可以為@{listfile} | !{wildcard}。
7z t -an -air!*.7z : 在當前目錄及子目錄下測試 *.7z 壓縮檔案。

-ax 指定必須從操作中排除的壓縮檔案。此選項可同時排除多個類型。
ax[<recurse_type>]<file_ref> 其中<recurse_type>為可以為r[- | 0](具體的-r選項見后面-r),<file_ref>可以為@{listfile} | !{wildcard}。
7z t -an -ai!*.7z -ax!a*.7z :測試除 a*.7z 之外的 *.7z 壓縮檔案。

更多的不常用的選項,可以查看幫助。例如:-m設置壓縮算法;-scs 設置要壓縮的文件的列表文件的字符集;-seml通過電子郵件發送壓縮檔;-sfx創建自釋放檔;-si從標準輸入讀入數據,-so從輸出到標準輸 出;-slp設置大內存模式;-slt顯示技術信息;-ssc設置區分大小寫;-ssw壓縮正在寫入的文件;-u更新選項。

 

posted @ 2012-11-05 14:38 jackdong 閱讀(2716) | 評論 (0)編輯 收藏

僅列出標題
共10頁: 1 2 3 4 5 6 7 8 9 Last 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区三区蜜桃网| 久久经典综合| 欧美视频一区二| 国产精品久久久久久久久久妞妞| 欧美国内亚洲| 欧美一级精品大片| 国产女主播一区二区| 国产精品专区一| 国产婷婷色一区二区三区在线| 亚洲精品1区2区| 精品1区2区| 亚洲免费观看| 欧美自拍偷拍午夜视频| 夜夜嗨av一区二区三区网页| 国产精品美女久久久浪潮软件| 亚洲一区二区精品视频| 久久精品国产96久久久香蕉| 欧美国产国产综合| 日韩亚洲视频| 欧美激情综合在线| 亚洲日本中文字幕免费在线不卡| 玖玖玖免费嫩草在线影院一区| 午夜伦欧美伦电影理论片| 国产精品亚洲产品| 久久不射网站| 久久精品免费电影| 一区二区在线观看视频在线观看| 免费国产自线拍一欧美视频| 老司机精品导航| 亚洲裸体在线观看| 一本一本久久| 国产亚洲一区在线| 美女网站在线免费欧美精品| 麻豆精品国产91久久久久久| 亚洲狼人精品一区二区三区| 一本色道**综合亚洲精品蜜桃冫| 国产精品一区二区黑丝| 久久久久国产精品www| 久久尤物视频| 亚洲视频1区2区| 欧美一级片久久久久久久| 亚洲第一区在线| 一区二区三区欧美视频| 国产主播一区二区| 亚洲人体一区| 国产精品二区二区三区| 久久九九久精品国产免费直播| 另类欧美日韩国产在线| 亚洲视频在线一区| 亚洲综合视频在线| 亚洲国产成人久久综合| 一区二区三区.www| 精品91在线| 亚洲一区二区成人| 亚洲精品国产精品久久清纯直播| 国产精品99久久久久久www| 国产自产女人91一区在线观看| 最新成人在线| 精品91久久久久| 亚洲一区二区欧美| 91久久午夜| 欧美专区在线播放| 亚洲一区三区视频在线观看| 久久亚洲私人国产精品va媚药 | 欧美午夜精品久久久久免费视 | 久久久久国产精品人| 这里只有精品视频在线| 久久精品色图| 亚洲欧美经典视频| 欧美另类videos死尸| 欧美a级理论片| 国产欧美日韩视频在线观看| 日韩午夜一区| 麻豆九一精品爱看视频在线观看免费 | 国产麻豆精品theporn| 亚洲三级网站| 亚洲激情欧美| 久久天天综合| 欧美综合激情网| 国产精品www网站| 亚洲精品影院在线观看| 亚洲人成免费| 欧美88av| 亚洲国产精品va在看黑人| 国内伊人久久久久久网站视频| 亚洲无玛一区| 性感少妇一区| 国产精品一区一区| 亚洲欧美另类在线观看| 亚洲欧美在线免费观看| 国产精品va在线播放| 日韩网站在线| 亚洲一区二区在线免费观看视频| 欧美日韩一区二区免费在线观看| 亚洲国产欧美在线人成| 亚洲人成7777| 欧美日本一道本在线视频| 91久久夜色精品国产九色| 最新成人av在线| 欧美二区在线观看| 亚洲精品欧美日韩| 亚洲一区二区动漫| 国产伦精品一区二区| 久久精品国产亚洲一区二区三区| 久久九九精品99国产精品| 狠狠久久婷婷| 欧美sm重口味系列视频在线观看| 欧美激情四色 | 亚洲国产毛片完整版 | 香蕉久久夜色精品国产使用方法| 欧美色精品天天在线观看视频| 亚洲精品九九| 亚洲欧美清纯在线制服| 国产精品欧美风情| 欧美在线一二三| 欧美77777| 日韩视频中文字幕| 国产精品大片wwwwww| 欧美在线观看www| 亚洲第一在线| 亚洲在线网站| 在线国产亚洲欧美| 欧美日韩国产一区二区三区| 亚洲一区二区少妇| 欧美不卡一卡二卡免费版| 9l国产精品久久久久麻豆| 国产精品毛片在线看| 久久久欧美一区二区| 99视频超级精品| 久久免费视频这里只有精品| 亚洲最新在线| 国产亚洲一区二区在线观看| 亚洲黄色精品| 久久福利毛片| av不卡在线观看| 国产综合一区二区| 欧美日韩日本网| 久久国产一二区| 亚洲美女在线一区| 久久综合免费视频影院| 亚洲一区二区黄色| 亚洲国产专区| 国产视频观看一区| 欧美日韩免费在线观看| 久久精品亚洲一区| 在线一区二区三区做爰视频网站| 欧美91大片| 久久精品国产99国产精品澳门| 一本色道久久综合亚洲二区三区 | 亚洲国产精品悠悠久久琪琪| 国产精品毛片在线| 欧美激情导航| 久久免费的精品国产v∧| 亚洲特级片在线| 亚洲精品美女| 欧美国产高清| 欧美激情一二三区| 久久综合九色九九| 性一交一乱一区二区洋洋av| 99热精品在线观看| 亚洲国产欧美在线| 尤物99国产成人精品视频| 国产日韩精品在线| 国产精品高潮呻吟视频| 欧美日韩成人在线观看| 欧美国产日韩免费| 久久夜色精品国产亚洲aⅴ| 欧美与欧洲交xxxx免费观看| 亚洲综合清纯丝袜自拍| 亚洲一级一区| 亚洲无线视频| 亚洲午夜精品网| 亚洲视频成人| 亚洲视频一区二区| 亚洲线精品一区二区三区八戒| 亚洲毛片一区二区| av成人老司机| 一区二区三区精品视频| 日韩视频一区二区三区| 日韩五码在线| 一区二区三区毛片| 亚洲欧美视频在线| 欧美一区永久视频免费观看| 欧美影院成年免费版| 久久精品动漫| 免费成人av在线看| 欧美精品一区二区三区视频| 欧美日本高清视频| 国产精品啊v在线| 国产欧美1区2区3区| 国内精品视频一区| 亚洲电影在线播放| 亚洲国产精品视频| 中文有码久久| 欧美一区观看| 免费91麻豆精品国产自产在线观看| 欧美激情视频网站| 国产精品99久久久久久白浆小说| 香蕉成人伊视频在线观看| 久久亚洲欧洲|