2012-09-21 23 views
5

Tôi viết dự án của mình bằng c với opencv. Tôi muốn in thông tin về bộ nhớ được cấp phát hoặc bộ nhớ được chương trình của tôi sử dụng. Có chức năng nào, cung cấp cho tôi thông tin về bộ nhớ không? Cuối cùng tôi đang sử dụng Qt cho Linux và Windows,Làm cách nào để có được kích thước bộ nhớ do chương trình của tôi phân bổ?

Cảm ơn bạn trước.

+0

Chủ đề trước đây có một số ý tưởng http://stackoverflow.com/questions/6192531/best-strategy-for-profiling-memory-usage-of-my-code-open-source-and-3rd-party – Ari

Trả lời

4

Bạn có thể viết trình bao bọc cho mallocfree theo dõi lượng bộ nhớ bạn đang sử dụng.

EDIT: Nếu bạn cũng muốn chặn cuộc gọi đến malloc và miễn phí trong thư viện bên ngoài, bạn sẽ phải xác định chúng trong thư viện được chia sẻ và tải nó trước libc. Làm thế nào bạn làm điều này phụ thuộc vào hệ điều hành của bạn.

+0

nếu bạn tải một thư viện và sử dụng 'malloc' chưa được mở, đó có phải là bộ nhớ được chương trình của bạn sử dụng hay không? –

+0

bạn có thể cho tôi ví dụ về malloc như trình bao bọc và miễn phí không. – Aym

+0

@RemusRusanu nó hoàn toàn có thể thực sự. Người ta có thể gọi trực tiếp chức năng bộ nhớ OS. giống như 'sbrk' (mặc dù không được đề xuất vì nó can thiệp vào một số triển khai malloc). 'memmap' được sử dụng bởi mallocs hiện đại, và cung cấp cho khối riêng biệt của mem. 'VirtualAlloc' trên Win32, cùng một khái niệm. Hoặc các công cụ 'NTHeap' nữa. –

4

Trên Linux bạn nhìn vào your own process info pseudo-file:

/proc/[pid]/statm 
Provides information about memory usage, measured in pages. The columns are: 
size  total program size 
      (same as VmSize in /proc/[pid]/status) 
resident resident set size 
      (same as VmRSS in /proc/[pid]/status) 
share  shared pages (from shared mappings) 
text  text (code) 
lib  library (unused in Linux 2.6) 
data  data + stack 
dt   dirty pages (unused in Linux 2.6) 

Trên Windows bạn nhìn vào bạn sở hữu quá trình Process Object bộ đếm hiệu suất:

Private Bytes Hiển thị số lượng hiện tại của byte rằng quá trình này đã được phân bổ mà không thể được chia sẻ với các quy trình khác.

-1

Bạn cũng có thể thực hiện một số mức phân tích bộ nhớ của phân đoạn Mã/Dữ liệu trong suốt thời gian xây dựng nếu bạn kiểm tra elf, dump hoặc tệp bản đồ. Và các tùy chọn dòng lệnh GCC để sử dụng ngăn xếp là: -fstack-usage và -fcallgraph-info.

+0

-1 Tôi khá chắc chắn OP đang yêu cầu bộ nhớ được cấp phát khi chạy. – quantum

Các vấn đề liên quan