利用MingW檢驗程式執行記憶體
今天zhx老師在講課的時候提到了一種檢驗程式記憶體的方法
一般計算記憶體的方法就是手算,手動計算程式碼中每個變數所佔的記憶體然後加起來
具體可以參考這篇文章
zhx老師講的方法可以實現全自動化計算記憶體
具體怎麼做呢?
找到size.exe
首先你要有個MingW,oier黨可以在DevC++的目錄中找到
在這裡面的bin目錄中會有一個size.exe的檔案
然後我們把這個程式加入到環境變數中
(就是把這個程式所在的目錄加入的環境變數Path中)
加入環境變數
步驟:
實現
接下來就是見證奇蹟的時刻
比如我們在某目錄下有一個待測檔案
它的程式碼長這樣
我們不難計算出它的記憶體大約為381M($10001*10001*4/1024/1024$)
然後我們在當前目錄下開啟一個cmd
輸入 size + 程式名 即可得到對應的記憶體
注意這裡的記憶體是位元組,所以計算的時候直接$/1024$再$/1024$就好
不難計算出記憶體大小差不多也是381M!
注意,這裡的size命令只能計算靜態記憶體!
你開個vector再push_back個100W次它是不會管的!
下圖中上面的是執行了1e9次push_back的結果
而下面是不執行的結果(都一樣。。。)
相關推薦
利用MingW檢驗程式執行記憶體
今天zhx老師在講課的時候提到了一種檢驗程式記憶體的方法 一般計算記憶體的方法就是手算,手動計算程式碼中每個變數所佔的記憶體然後加起來 具體可以參考這篇文章 zhx老師講的方法可以實現全自動化計算記憶體 具體怎麼做呢? 找到size.exe 首先你要有個MingW,oier黨可以在DevC++
Java程式執行記憶體機制
# Java程式執行記憶體機制 棧記憶體包留呼叫方法、變數的區域,堆記憶體是new物件的區域,方法區為儲存class檔案的區域。 程式剛開始時,先載入類檔案相應的資料到方法區,然後就從`main()`方法開始執行。執行`main()`方法,`main()`方法入棧,執行`phone one = new P
031_面向物件_04_程式執行過程的記憶體分析_01
一、概念部分 a)屬性(field):也叫成員變數,在類體(類內方法外)的變數部分中定義的變數。 屬性用於定義該類或該類物件包含的資料或者說靜態屬性。屬性的作用範圍是整個類體 b)區域性變數:定義在語句塊/方法裡面的變數。只有該語句塊、方法能使用,並且使用前必須要進行手動初始化。語句塊或
032_面向物件_05_程式執行過程的記憶體分析_02
一、例項程式碼 package edu.aeon.test; /** * [說明]計算機類 * @author aeon */ public class Computer { /**計算機品牌*/ public String brand; /**計算機cpu速度*/
java程式執行的記憶體分配小記
五個資料儲存區: 一、暫存器:最快的儲存區,位於處理器內部,但是數量有限,需要根據需求進行分配,所以無法由程式直接控制。 二、堆疊:位於通用RAM(隨機訪問儲存器)中,通過堆疊指標可以獲得直接支援,指標向下移動,即分配新的記憶體,指標向上移動,則釋放記憶體,速度僅次於暫存
程式執行時間(15) 時間限制 1000 ms 記憶體限制 32768 KB 程式碼長度限制 100 KB 判斷程式 Standard (來自 小小)
題目描述 要獲得一個C語言程式的執行時間,常用的方法是呼叫標頭檔案time.h,其中提供了clock()函式,可以捕捉從程式開始執行到clock()被呼叫時所 耗費的時間。這個時間單位是clock tick,即“時鐘打點”。同時還有一個常數CLK_TCK,給出了機器時鐘每秒
Linux下檢視某一個程式執行所佔用的記憶體【轉】
第一種方式 top -p 程序號 [[email protected] micro-service]$ top -p 20490 top - 16:50:32 up 6 days, 2:18, 1 user, load average: 0.00,
JAVA基礎(21)---程式執行的記憶體流轉
從main方法開始執行,main方法在方法區,找到main方法之後,將main方法入棧,開始執行,從上而下,執行第一條語句,建立一個物件,然後執行呼叫的add方法,再把add方法入棧,然後執行ad
程式執行結束後,記憶體洩漏還存在嗎?
先說結論:對於現代作業系統,洩露的記憶體會被作業系統自動釋放,叫記憶體自動回收。 那為什麼程式設計師要手動釋放記憶體呢? 原因1:如果程式存在記憶體洩漏,但恰好執行的作業系統可以幫你自動釋放,那麼短時間執行沒問題。但是,如果移植到另一個沒有記憶體自動回收功能的作業系統,怎麼辦? 原因2:
程式執行時的記憶體空間分佈
我們在寫程式時,既有程式的邏輯程式碼,也有在程式中定義的變數等資料,那麼當我們的程式進行時,我們的程式碼和資料究竟是存放在哪裡的呢?下面就來總結一下。 一、程式執行時的記憶體空間情況 其實在程式執行時,由於記憶體的管理方式是以頁為單位的,而且程式使用的地址都是虛擬地
C++程式執行時記憶體佈局之----------區域性變數,全域性變數,靜態變數,函式程式碼,new出來的變數
宣告兩點: (1)開發測試環境為VS2010+WindowsXP32位; (2)記憶體佈局指的是虛擬記憶體地址,不是實體地址。 1.測試程式碼 #include <iostream> using namespace std; int g_int_a; i
C# ASP.NET 優化程式效能、降低記憶體使用、提高程式執行速度
首先紀念一下今天的股票大跌抓個圖,雖然我自己損失不是很大,但是應該大多人都損失不小、也可能有人會繼續跳樓,也可能是股市一個新的轉折點來了。 接著還是重點關注自己寫程式碼優化的主題吧、軟體系統當訪問量不大、資料量不大時、程式寫得好與壞的差別,但是每天有上萬人使用時那程式碼寫得好與壞就差別很大了。 優
程式執行過程中堆記憶體的簡單分析
JAVA語言中除基本型別之外的變數型別,都稱之為引用型別。 JAVA中物件是通過引用reference對其操作的。 新建物件時,引用型別的資料都是null,基本資料型別 int 是 0 string 是null boolean 是false (預設初始化) 方法:引數傳遞的值是 值傳遞。
如何利用記事本編寫並執行一個java程式
1.下載jdk 可以在oracle官網下載: 注意選擇36位還是64位 下載以後按照步驟逐步安裝即可 但是要注意,在jdk和jre不可安裝到同一目錄,否則執行的時候找不到javac命令 這是因為j
利用多核多執行緒進行程式優化
大家也許還記得 2005 年 3 月 C++ 大師 Herb Sutter 在 Dr.Dobb’s Journal 上發表了一篇名為《免費的午餐已經結束》的文章。文章指出:現在的程式設計師對效率、伸縮性、吞吐量等一系列效能指標相當忽視,很多效能問題都仰仗越來越快
windows、ubuntu系統程式執行檢視視訊記憶體方法
ubuntu系統 開啟終端 在終端直接輸入命令列 nvidia-smi 即可檢視 windows系統 執行 命令列 nvidia-smi.exe -l 方法如下: nvidia-smi.exe 路徑 C:\Windows\System32\DriverStor
提高win7單個程式的執行記憶體限制命令and JSON線上核對
win+r進入命令列,輸入:bcdedit /set IncreaseUserVA 4096 後面的數字就是多少M,我設定成4G記憶體 http://www.bejson.com/jsoneditor
獲取java程式執行時記憶體資訊
由於最近想自己動手測試一下String和StringBuffer的效率問題,需要獲取程式執行時的記憶體佔中資訊,於是上網查了一下,根據查到的資料寫了個程式,發現結果有問題,才發現查到的資料是錯誤的.所以在這裡跟大家分享一下獲取記憶體佔用的正確方法
Linux C/C++記憶體越界定位: 利用mprotect使程式在crash在第一現場
對於大型Linux C/C++程式,記憶體越界和野指標類問題往往比較難定位。有的由於記憶體被非法改寫造成了業務功能問題,有的則直接導致了程式crash,而且還經常不是第一現場。針對這種問題,可以採取的解決方法有: 利用valgrind工具來排查,會影響程式效能
利用fork和execve執行程式
#include <wait.h> #include <stdio.h> #include <zconf.h> #include <cstdlib> #include <cstring> #include <c