C# 開啟大地址記憶體以應對32位機器記憶體不夠用問題
作者:炊文偉
專注於以安全為核心的平安城市,智慧交通,智慧家居軟體平臺解決方案設計與開發
概述:- 在目前很多機器都使用8G記憶體情況下,很多軟體卻無法有效使用更高記憶體,本文主要簡述使用C#語言開發的應用程式,使用系統自帶的Editbin工具開啟3G大記憶體使用。
詳細步驟(以VS2015舉例):
- 第一步:找到editbin.exe檔案
格式:VS版本\VC\bin\editbin.exe
以我機器為例其位於VS軟體安裝目錄下:C:\Program Files (x86)\MicrosoftVisual Studio 14.0\VC\bin\editbin.exe
- 第二步:執行開啟大地址命令
命令格式:/largeaddressaware exe檔案路徑
以我機器下一個WindowsFormsApplication1程式(.Net4.0)為例:
/largeaddressaware C:\Users\chuiwenwei\Desktop\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe
命令列中執行如下:
C:\ProgramFiles (x86)\Microsoft Visual Studio 14.0\VC\bin>editbin /largeaddressawareC:\Users\chuiwenwei\Desktop\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe
- 第三步:執行後如下所示:
C:\ProgramFiles (x86)\Microsoft Visual Studio 14.0\VC\bin>editbin /largeaddressawareC:\Users\chuiwenwei\Desktop\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe
Microsoft(R) COFF/PE Editor Version 14.00.23026.0
Copyright(C) Microsoft Corporation. All rightsreserved.
- 第四步:驗證是否確實開啟了大地址
在editbin.exe檔案上方可以看到dumbin.exe檔案。
命令格式:/headersexe檔案路徑
以我機器下剛才設定的WindowsFormsApplication1程式(.Net4.0)為例:
C:\ProgramFiles (x86)\Microsoft Visual Studio 14.0\VC\bin>dumpbin /headersC:\Users\chuiwenwei\Desktop\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe
- 第五步:顯示如下資訊即可確認獲取資訊成功
C:\ProgramFiles (x86)\Microsoft Visual Studio 14.0\VC\bin>dumpbin /headersC:\Users\chuiwenwei\Desktop\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe
Microsoft(R) COFF/PE Dumper Version 14.00.23026.0
Copyright(C) Microsoft Corporation. All rightsreserved.
Dump offileC:\Users\chuiwenwei\Desktop\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe
PEsignature found
FileType: EXECUTABLE IMAGE
FILEHEADER VALUES
14C machine (x86)
3 number of sections
56E7F29F time date stamp Tue Mar 1519:31:43 2016
0 file pointer to symbol table
0 number of symbols
E0 size of optional header
22 characteristics
Executable
Application can handle large(>2GB) addresses
OPTIONALHEADER VALUES
10B magic # (PE32)
48.00 linker version
1200 size of code
A00 size of initialized data
0 size of uninitialized data
3002 entry point (00403002)
2000 base of code
4000 base of data
400000 image base (00400000 to00407FFF)
2000 section alignment
200 file alignment
4.00 operating system version
0.00 image version
4.00 subsystem version
0 Win32 version
8000 size of image
200 size of headers
1E14 checksum
2 subsystem (Windows GUI)
8540 DLL characteristics
Dynamic base
NX compatible
No structured exceptionhandler
Terminal Server Aware
100000 size of stack reserve
1000 size of stack commit
100000 size of heap reserve
1000 size of heap commit
0 loader flags
10 number of directories
0 [ 0] RVA [size] of Export Directory
2FAD [ 4F] RVA [size] of Import Directory
4000 [ 62C] RVA [size] of Resource Directory
0 [ 0] RVA [size] of Exception Directory
0 [ 0] RVA [size] of Certificates Directory
6000 [ C]RVA [size] of Base Relocation Directory
2F04 [ 1C] RVA [size] of Debug Directory
0 [ 0] RVA [size] of Architecture Directory
0 [ 0] RVA [size] of Global PointerDirectory
0 [ 0]RVA [size] of Thread Storage Directory
0 [ 0] RVA [size] of Load ConfigurationDirectory
0 [ 0] RVA [size] of Bound Import Directory
2000 [ 8] RVA [size] of Import Address TableDirectory
0 [ 0] RVA [size] of Delay Import Directory
2008 [ 48] RVA [size] of COM DescriptorDirectory
0 [ 0] RVA [size] of Reserved Directory
SECTIONHEADER #1
.text name
1008 virtual size
2000 virtual address (00402000 to 00403007)
1200 size of raw data
200 file pointer to raw data (00000200 to000013FF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
60000020flags
Code
Execute Read
Debug Directories
Time Type Size RVA Pointer
-------- ------- -------- -------- --------
56E7F29E cv 8D 00002F20 1120 Format: RSDS, {D72A86FA-9265-4A90-9885-AEED19611EC0}, 1,C:\Users\chuiwenwei\Desktop\WindowsFormsApplication1\WindowsFormsApplication1\obj\Debug\WindowsFormsApplication1.pdb
SECTIONHEADER #2
.rsrc name
62C virtual size
4000 virtual address (00404000 to 0040462B)
800 size of raw data
1400 file pointer to raw data (00001400 to00001BFF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
40000040flags
Initialized Data
Read Only
SECTIONHEADER #3
.reloc name
C virtual size
6000 virtual address (00406000 to 0040600B)
200 size of raw data
1C00 file pointer to raw data (00001C00 to00001DFF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
42000040flags
Initialized Data
Discardable
Read Only
Summary
2000 .reloc
2000 .rsrc
2000 .text
- 第六步:如果可以Application can handle large (>2GB)addresses就說明設定大地址成功
相關推薦
C# 開啟大地址記憶體以應對32位機器記憶體不夠用問題
作者:炊文偉 郵箱:[email protected] 專注於以安全為核心的平安城市,智慧交通,智慧家居軟體平臺解決方案設計與開發 概述: 在目前很多機器都使用8G記憶體情況下,很多軟體卻
為什麽32位機器最大只能用到4GB內存
必須 lan 組成 討論 bit 大小 mage 技術分享 同時 在此之前先來了解一些計算機存儲單位之間的關系以及計算機系統結構和PC硬件方面的一些知識。 一、計算機存儲單位之間的關系 位 bit (Binary Digits):存放一位二進制數,即 0 或 1,
C語言實現 兩個int(32位)整數m和n的二進位制表達中,有多少個位(bit)不同?
輸入例子: 1999 2299 輸出例子:7 int main() { int a = 0; int b = 0; int num = 0; int count = 0; printf("請輸入兩個整數:"); scanf("%d%d",&a,&b); n
win7 32位系統記憶體限制破解支援到128G記憶體
使用win7 32位的系統,很多使用者都是會遇到32位系統8G記憶體只能使用3.48GB記憶體可用。32位理論上最大也就3.75GB可用,但實際上也就3.25GB能夠正常使用,其他的就是拿來做快取了。 不過坑爹的是32位的系統最多隻能支援3G多的記憶體,現在很多
【C語言】兩個int(32位)整數m和n的二進位制表達中,有多少個位(bit)不同
根據異或我們可以知道,兩個數字的二進位制位按位異或,相同為0,相異為1。 因此我們可以通過將兩個數字按位異或,並計算該異或結果中二進位制位中1的個數,即可知道有多少個位元位不同。 int count(int a, int b) { int m = a ^ b; // 兩個數按位異或,對應不
32位作業系統記憶體大小識別
500元、300元、150元......隨著DDR2價格的逐漸崩盤,目前連2GB DDR2-800記憶體的價格也已經跌至百元,越來越多的朋友為愛機裝上了4GB記憶體。隨著4GB電腦的逐漸增加,一個長期存在的問題又再次被人們所關注:為何我只能看到3.25GB實體記憶體? 1
Windows 32位程式記憶體擴充套件
所有 32 位應用程式都有 4 GB 的程序地址空間(32 位地址最多可以對映 4 GB 的記憶體)。對於 Microsoft Windows 作業系統,應用程式可以訪問 2 GB 的程序地址空間,稱為使用者模式虛擬地址空間。應用程式擁有的所有執行緒都共享同一個使用者模式
假設在32位機器上,請在2億個未經排序數字中找出中間值 給出算法思路就可以
iad use tar www sina gtk 算法 irf 機器 訟23乙6j8型f漳略cshttp://shequ.docin.com/kln26571 kxYsa2矢62祭匝練6http://shufang.docin.com/sina_5847497260 1
64位機器與32位機器的區別
文章目錄 一、區別 二、參考 一、區別 比如32位機器 運算器一次最多可以處理32位資料 暫存器最大寬度32 暫存器和運算器之間的通路為32位 如下面的16位機器,運算器和暫存器之間通路為16位。暫存器
32位windos裝不了TensorFlow
花了2天時間在垃圾電腦(32位)上裝TensorFlow 先是按著百度靠前的程式碼,一句一句的抄。 那個是適合64位的,32位也能裝上,不能使用。浪費半天 然後跟著一個先搜尋,再安裝的教材裝的。 有hesi_m/tensorflow r-tensorflow
32位機器和64位機器
#include <stddef.h>OS version:Red Hat Enterprise Linux Server release 5.3 (Tikanga) Linux 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 x
32位機器和64位機器各型別的長度對比
1.Linux下檢視系統位數的指令: getconf LONG_BIT
32位機器 64位 機器
#include <stddef.h> OS version:Red Hat Enterprise Linux Server release 5.3 (Tikanga) Linux 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_
32位模式下C/C++程式可用最大記憶體
由於在32位處理器架構下,對記憶體的訪問限制在4GB以下的空間。為了突破 4GB的限制,現在的32位至強處理器採用一種叫PAE(實體地址擴充套件)的技術,來實現對超出4GB空間的實體地址的訪問。PAE實際上採用了36位的地址匯流排,這樣理論上可以支援64GB記憶體空間的定址。 PAE使得處理器可以支援訪問
【C語言】位元組對齊問題(以32位系統為例)
1. 什麼是對齊? 現代計算機中記憶體空間都是按照位元組(byte)劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何地址開始,但實際情況是在訪問特定變數的時候經常在特定的記憶體地址訪問,這就需要各型別資料按照一定的規則在空間上排列,而不是順序地一個接一個地排放,這就是對齊
C/C++結構體對齊方式詳解,從記憶體地址進行解析
注意:童鞋們如果仔仔細細看完這篇部落格,肯定能明白結構體的對齊方式。 最近在做一個專案的時候,客戶給的鐳射點雲檔案是二進位制形式,因此需要根據客戶定義的結構體,將點雲檔案儲存為文字檔案方便在第三方軟體如cloudCompare中檢視。但是發現客戶的結構體所佔記憶體空間跟我的
windows 32位作業系統中,每個程序最大可用記憶體空間為3GB
在windows 32位作業系統中,每一個程序能使用到的最大空間(包含作業系統使用的核心模式地址空間)為4GB , 在通常情況下作業系統會分配2GB記憶體給程序使用,另外2GB記憶體為作業系統保留, 例如安裝了64GB記憶體,在伺服器上安裝了SQL / Exchange / ISA / IIS .....
PAE——使32位系統支援最大64G記憶體
1 PAE Physical Address Extension(PAE,中文譯名:實體地址擴充套件)技術最初是為了彌補32位地址在PC伺服器應用上的不足而推出的。我們知道,傳統的IA32架構只有32位地址匯流排,只能讓系統容納不超過4GB的記憶體,這麼大的記憶體,對於普
C/C++32位和64位編譯器下,各資料型別和指標變數分配記憶體大小
1. 32位定址空間 資料型別 佔用位元組數(位元組) 說明 資料型別 佔用位元組數(位元組) 說明 Bool 1 char 1
c語言中32為地址型別轉換為64位整數型別
uint64_t idt_operand = ((sizeof(idt) - 1) | ((uint64_t)(uint32_t)idt << 16)); idt是陣列名,也就是結構陣列型別的指標。static struct gate_desc idt[IDT