Đây là bản ghi nhớ lệnh có thể được chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS
CHƯƠNG TRÌNH:
TÊN
memusage - hồ sơ sử dụng bộ nhớ của một chương trình
SYNOPSIS
giấy nhớ [tùy chọn] ... chương trình [chương trình] ...
MÔ TẢ
giấy nhớ là một tập lệnh bash cấu hình việc sử dụng bộ nhớ của chương trình, chương trình. Nó
tải trước libmemusage.so thư viện vào môi trường của người gọi (thông qua LD_PRELOAD
biến môi trường; Thấy chưa ld.so(số 8)). Các libmemusage.so thư viện theo dõi phân bổ bộ nhớ
bằng cách chặn cuộc gọi tới malloc(3) calloc(3) tự do(3), và phân bổ tài chính(3); tùy chọn, cuộc gọi
đến mmap(2) bản đồ(2), và bản đồ(2) cũng có thể bị chặn.
giấy nhớ có thể xuất dữ liệu đã thu thập ở dạng văn bản hoặc nó có thể sử dụng bản ghi nhớ(1) (xem
các -p tùy chọn, bên dưới) để tạo tệp PNG chứa biểu diễn đồ họa của
dữ liệu đã thu thập.
Bộ nhớ sử dụng tóm tắt
Dòng "Tóm tắt sử dụng bộ nhớ" xuất ra bởi giấy nhớ chứa ba trường:
heap Tổng số
Tổng của kích thước đối số của tất cả malloc(3) lời kêu gọi, sản phẩm của các đối số
(nmemb*kích thước) của tất cả calloc(3) cuộc gọi và tổng của chiều dài đối số của tất cả mmap(2)
cuộc gọi. Trong trường hợp phân bổ tài chính(3) bản đồ(2), nếu kích thước mới của một
phân bổ lớn hơn kích thước trước đó, tổng của tất cả các khác biệt đó
(kích thước mới trừ kích thước cũ) được thêm vào.
heap đỉnh
Tối đa của tất cả kích thước đối số của malloc(3), tất cả các sản phẩm của nmemb*kích thước of
calloc(3), tất cả kích thước đối số của phân bổ tài chính(3) chiều dài đối số của mmap(2), và
kích thước mới đối số của bản đồ(2).
ngăn xếp đỉnh
Trước lệnh gọi đầu tiên đến bất kỳ chức năng được giám sát nào, địa chỉ con trỏ ngăn xếp
(con trỏ ngăn xếp cơ sở) được lưu. Sau mỗi lần gọi hàm, ngăn xếp thực tế
địa chỉ con trỏ được đọc và sự khác biệt so với con trỏ ngăn xếp cơ sở
tính toán. Giá trị lớn nhất của những khác biệt này sau đó là đỉnh ngăn xếp.
Ngay sau dòng tóm tắt này, một bảng hiển thị các cuộc gọi số, tổng bộ nhớ
được phân bổ hoặc phân bổ và số lượng lệnh gọi không thành công cho mỗi hàm bị chặn. Vì
phân bổ tài chính(3) bản đồ(2), trường bổ sung "nomove" hiển thị các phân bổ lại đã thay đổi
địa chỉ của một khối và trường "dec" bổ sung hiển thị các phân bổ lại đã giảm
kích thước của khối. Vì phân bổ tài chính(3), trường bổ sung "miễn phí" hiển thị các phân bổ lại
khiến một khối được giải phóng (tức là kích thước được phân bổ lại là 0).
"Phân bổ lại / tổng bộ nhớ" của bảng xuất ra bởi giấy nhớ không phản ánh các trường hợp
phân bổ tài chính(3) được sử dụng để phân bổ lại một khối bộ nhớ có kích thước nhỏ hơn trước đó.
Điều này có thể khiến tổng của tất cả các ô "tổng bộ nhớ" (không bao gồm "trống") lớn hơn
ô "trống / tổng bộ nhớ".
Histogram cho chặn kích thước
"Biểu đồ cho kích thước khối" cung cấp bảng phân bổ bộ nhớ thành nhiều
các kích thước xô.
LỰA CHỌN
-n tên, --progname =tên
Tên của tệp chương trình vào hồ sơ.
-p hồ sơ, --png =hồ sơ
Tạo đồ họa PNG và lưu trữ nó trong hồ sơ.
-d hồ sơ, --data =hồ sơ
Tạo tệp dữ liệu nhị phân và lưu trữ trong hồ sơ.
-u, --không có bộ đệm
Không đệm đầu ra.
-b kích thước, --buffer =kích thước
Thu thập kích thước các mục trước khi viết chúng ra.
- không hẹn giờ
Tắt tính năng dựa trên bộ hẹn giờ (SIGPROF) lấy mẫu giá trị con trỏ ngăn xếp.
-m, - bản đồ
Cũng theo dõi mmap(2) bản đồ(2), và bản đồ(2).
-?, --Cứu giúp
In trợ giúp và thoát.
--sử dụng
In một tin nhắn sử dụng ngắn và thoát.
-V, --phiên bản
In thông tin phiên bản và thoát.
Các tùy chọn sau chỉ áp dụng khi tạo đầu ra đồ họa:
-t, - dựa trên thời gian
Sử dụng thời gian (thay vì số lần gọi hàm) làm tỷ lệ cho trục X.
-T, --toàn bộ
Đồng thời vẽ biểu đồ sử dụng tổng bộ nhớ.
--title =tên
Sử dụng tên như tiêu đề của đồ thị.
-x kích thước, --x-size =kích thước
Vẽ biểu đồ kích thước rộng pixel.
-y kích thước, --y-size =kích thước
Vẽ biểu đồ kích thước pixel cao.
EXIT TÌNH TRẠNG
Trạng thái thoát bằng trạng thái thoát của chương trình đã định cấu hình.
THÍ DỤ
Dưới đây là một chương trình đơn giản giúp tái phân bổ một khối bộ nhớ trong các chu kỳ tăng lên đến đỉnh điểm
trước đó phân bổ lại theo chu kỳ bộ nhớ trong các khối nhỏ hơn trở về XNUMX.
Sau khi biên dịch chương trình và chạy các lệnh sau, một biểu đồ của bộ nhớ
cách sử dụng chương trình có thể được tìm thấy trong tệp memusage.png:
$ giấy nhớ --data = memusage.dat ./a.out
hữu ích. Cảm ơn !
Tóm tắt sử dụng bộ nhớ: tổng số heap: 45200, đỉnh của heap: 6440, đỉnh của ngăn xếp: 224
tổng số cuộc gọi tổng bộ nhớ các cuộc gọi không thành công
malloc | 1 400 0
realloc | 40 44800 0 (nomove: 40, dec: 19, free: 0)
calloc | 0 0 0
miễn phí | 1 440
Biểu đồ cho kích thước khối:
192-207 1 2% =================
hữu ích. Cảm ơn !
2192-2207 1 2% =================
2240-2255 2 4% ====================================
2832-2847 2 4% ====================================
3440-3455 2 4% ====================================
4032-4047 2 4% ====================================
4640-4655 2 4% ====================================
5232-5247 2 4% ====================================
5840-5855 2 4% ====================================
6432-6447 1 2% =================
$ bản ghi nhớ memusage.dat memusage.png
chương trình nguồn
#bao gồm
#include
#define CHU KỲ 20
int
main (int argc, char * argv [])
{
int tôi, j;
int * p;
printf ("malloc:% zd \ n", sizeof (int) * 100);
p = malloc (sizeof (int) * 100);
for (i = 0; i <CYCLES; i ++) {
nếu (tôi <CYCLES / 2)
j = tôi;
khác
NS--;
printf ("realloc:% zd \ n", sizeof (int) * (j * 50 + 110));
p = realloc (p, sizeof (int) * (j * 50 + 100));
printf ("realloc:% zd \ n", sizeof (int) * ((j + 1) * 150 + 110));
p = realloc (p, sizeof (int) * ((j + 1) * 150 + 110));
}
miễn phí (p);
thoát ra (EXIT_SUCCESS);
}
Sử dụng memusage trực tuyến bằng các dịch vụ onworks.net