1. 程式人生 > >利用MingW檢驗程式執行記憶體

利用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