Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Hướng dẫn C++ | Cách đo dung lượng bộ nhớ heap

  1. #1
    Ngày gia nhập
    11 2007
    Bài viết
    153

    Mặc định Hướng dẫn C++ | Cách đo dung lượng bộ nhớ heap

    Các bạn có bao giờ thắc mắc là dung lượng bộ nhớ heap ( dùng để cấp phát bộ nhớ cho con trỏ bằng hàm malloc nếu trong C hoặc toán tử new nếu trong C++ ) có dung lượng là bao nhiêu chưa ?

    Về vấn đề này có 1 thủ thuật nho nhỏ để giải quyết . Ta sẽ lợi dụng tính chất của hàm _new_handler .

    Hàm _new_handler : Được gọi một cách tự động khi mà bộ nhớ heap đã " hết chỗ " . Hàm này khi được gọi nó sẽ ... không làm gì cả . Nhưng nếu ta truyền cho nó "công việc làm" thì nó sẽ làm công việc ấy mỗi khi heap đầy . Ta thực hiện việc này bằng hàm set_new_handler . Hàm này nhận tên một hàm khác và gán công việc của hàm ấy cho hàm _new_handler . Code sau rất dễ hiểu giúp bạn đo dung lượng heap : ^_^ . Chú ý chỉ chạy trên môi trường DOS ( TC ,BC for DOS ) . Nếu chạy trên window sẽ nhận thông báo lỗi .

    C++ Code:
    1. #include <iostream.h>
    2. #include <new.h>
    3. #include <stdlib.h>
    4. #include <conio.h>
    5. unsigned long i=0;
    6.  
    7. void thongbao(void)
    8. {
    9.  cout<<"bo nho heap da bi day sau khi goi "<<i<<" bien nguyen\n";
    10.  cout<<"nhu vay , bo nho heap co dung luong "<<i*sizeof(int)<<" byte\n";
    11.  getch();
    12.  exit(1);
    13. }
    14.  
    15. void main()
    16. {
    17.  clrscr();
    18.  set_new_handler(thongbao);
    19.  while(1) // cap phat bo nho "nhu dien" de lam cho heap day ... ^_^
    20.  {
    21.   new int;
    22.   i++;
    23.  }
    24. }
    ttecak ?

  2. #2
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Trước khi cậu chạy chương trinh này, thì vùng heap cũng đã bị chiếm chỗ bởi 1 vài chương trình khác. Như thế cậu ko lấy đúng kích cỡ của nó được.

  3. #3
    Ngày gia nhập
    11 2007
    Bài viết
    153

    Oh có vụ này nữa sao . Cảm ơn anh đã nhắc nhở nhe . Vậy hướng giải quyết ra sao đây ạ ?
    ttecak ?

  4. #4
    Ngày gia nhập
    07 2007
    Nơi ở
    Hồ Chí Minh
    Bài viết
    66

    Bác đo dc heap bao nhiêu sao.
    Tui thử 1 lần thấy nó cấp phát đến khi nào vượt kích thức page file + bộ nhớ.

    Theo mình dc biết,
    Windows cung cấp 1 process 4gb cho cái gọi là Ko gian địa chỉ bộ nhớ ảo.
    Thế nên bạn cần bao nhiêu cũng dc, tùy khai báo page file. Trong khi đó, bộ nhớ vật lý thì hạn hẹp, Thế nên có lúc HDH di chuyển nó xuống cái gọi là page file. Để có ram vật lý cần thiết cho ứng dụng đang cần xử lý. Bạn có thể nhận ra nó khi thay đổi 1 cửa số khi ram đang đầy, Hiện tượng đẩy dữ liệu của ứng dụng đang ngồi im trong bộ nhớ xuống page file, và đưa lên lại khi ứng dụng dc triệu gọi trở lại.
    Làm chậm quá trình xử lý. Nhưng giải quyết dc vấn đề thiếu Ram.
    Thèm khát con gái !!
    ......................

  5. #5
    Ngày gia nhập
    12 2006
    Bài viết
    72

    Không gian bộ nhớ ảo có thể tùy chỉnh được, windows sẽ tùy vào dung lượng bộ nhớ lưu trữ và bộ nhớ chính, thông thường dung lượng page file mặc định khi cài đặt gấp 1.5 lần bộ nhớ chính, vì bộ nhớ ảo chiếm dung lượng của ổ đĩa nhưng không được dùng một cách thường xuyên do đó chỉ chiếm không gian bộ nhớ==> đo dung lượng bộ nhớ heap khi bạn chạy trên môi trường windows thường không cho được kết quả mong muốn.

    Chúng ta có thể đo một cách khá chính xác khi chạy chương trình của comeonbaby trên hệ điều hành dos chính thống (chạy độc lập so với windows)vì trong dos không hoạt động theo các dịch vụ mà hoạt động theo các kích hoạt chương trình, tức là một thời điểm chỉ có một chương trình được chạy và khi chương trình này hoàn thành thì mới có thể thực thi tiếp các chương trình khác

Các đề tài tương tự

  1. Sự khác nhau của Heap Size và Array Length của mảng tạo thành Heap
    Gửi bởi cutithongtin trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 05-01-2011, 04:35 PM
  2. Xác định vùng nhớ Heap
    Gửi bởi haian trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 27-02-2010, 11:39 AM
  3. Xử lý đa luồng? (Heap sỏt)
    Gửi bởi exdragonk trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 11
    Bài viết cuối: 28-09-2009, 11:18 AM
  4. Bộ nhớ HEAP có dung lượng bao nhiêu Mb ?
    Gửi bởi gadapchetvoi trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 9
    Bài viết cuối: 12-12-2008, 02:56 PM
  5. cấp phát bộ nhớ bên Heap
    Gửi bởi ooze trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 9
    Bài viết cuối: 04-03-2008, 07:20 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn