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

Đề tài: hàm malloc hoạt động như thế nào?

  1. #1
    Ngày gia nhập
    09 2011
    Bài viết
    84

    Mặc định hàm malloc hoạt động như thế nào?

    mình xài hàm này nhiều nhất nhưng không hiểu cách thức hoạt động của nó.
    pro nào biết xin chỉ giáo
    RISC better than CISC
    phamthechung0@gmail.com

  2. #2
    Ngày gia nhập
    09 2008
    Bài viết
    57

    Theo mình được biết ( từ cuốn Linux Application Development), malloc sẽ xin cấp được cấp phát 1 vùng nhớ có độ dài xác định trong bộ nhớ Heap.

    Khi các trang nhớ được cấp, nó sẽ được gán 1 cái nhãn để cho các ứng dụng khác không được sử dụng nó nữa.

    Sau khi sử dụng xong vùng nhớ này, ta sử dụng hàm free đơn giản là chỉ để đánh dấu là không chương trình nào sử dụng đến vùng nhớ đó nữa chứ dữ liệu trên đó vẫn chưa được xóa.

    Muốn tìm hiểu thêm, bạn có thể đọc cuốn đó.
    Ghi rõ license hoặc 0 điểm

  3. #3
    Ngày gia nhập
    08 2010
    Bài viết
    17

    Bạn có thể kiếm cuốn "The C Programming Language 2nd" của D.Ritchie (tác giả của C). Trong đó có nói về phần này rất chi tiết. Cuốn đó là cuốn về C hay nhất mình từng đọc

  4. #4
    Ngày gia nhập
    12 2010
    Nơi ở
    hà thành
    Bài viết
    37

    ban đầu mình khi lập trình cũng hay bị cái này nhưng mình đã sửa đc rồi , hình như phải khai báo thư viện #include<stdlib.h> .hy vọng giúp đc bạn

  5. #5
    Ngày gia nhập
    08 2011
    Bài viết
    98

    Trích dẫn Nguyên bản được gửi bởi hardwire Xem bài viết
    mình xài hàm này nhiều nhất nhưng không hiểu cách thức hoạt động của nó.
    pro nào biết xin chỉ giáo
    Nhìn vào VD sau

    C Code:
    1. #include <stdlib.h>
    2. #include <stdio.h>
    3. ....
    4. #define MB (1024 * 1024) // 1 MB
    5.  
    6. int main(){
    7.     char *vungnhocapphat;
    8.     int mb = MB;
    9.     vungnhocapphat = (char *)malloc(mb);
    10.    
    11.     if(vungnhocapphat != NULL){
    12.         sprintf(vungnhocapphat,"cap phat malloc cua lttq \n");
    13.         printf("%s",vungnhocapphat);
    14.         free(vungnhocapphat);
    15.     }
    16.     else printf("loi trong qua trinh cap phat");
    17. }

    hàm malloc sẽ yêu cầu hệ điều hành cấp phát và trả về con trỏ ở 1 vùng nhớ dài 1MB.Hàm malloc trả về kiểu *void,nên ta chỉ cần ép qua char để access đến vùng nhớ theo kiểu chuỗi ký tự.

    Ta kiểm tra con trỏ chỉ là để giúp xem xem việc cấp phát có thành công hay không.
    Hàm malloc đơn thuần chỉ xin cấp phát 1 chuỗi byte liên tiếp trên bộ nhớ,vì thế kết quả trả về có thể ép qua kiểu gì cũng được.

    Cần nói thêm là trên Unix đánh địa chỉ phẳng(flat-memory) đến 4GB,để việc access vào memory dễ chịu hơn.Khi địa chỉ vật lý dường như quá đầy,hệ điều hành sẽ swap với vùng swap mà ta đã khởi tạo lúc cài đặt hệ điều hành.Mặc dù vậy,nhưng việc cấp phát của hệ điều hành là tự động.Ta khôngcần quan tâm đến các vùng nhớ như heap hay các vùng cố định(fix segment).Kernel của linux đã làm hết cho ta rồi.

    Khi giải phóng bộ nhớ bằng hàm free thì con trỏ được trỏ đến vùng nhớ được giải phóng.Lúc này con trỏ đó không thể đọc ghi được nữa.Nếu cố tình đọc ghi thì sẽ sinh lỗi segmentation fault.

    Có 1 điều khá thú vị là bạn thử cấp phát 1 vùng nhớ lớn tầm 500 MB thì có thể sẽ được.Rồi thử cấp phát tiếp 100 vùng 5MB. thì chắc chắn là hệ điều hành có thể k cho phép nữa.Vì việc cấp phát lúc này là rất rời rạc trên bộ nhớ,dẫn đến hết bộ nhớ để cấp phát.Nói như thế để thấy việc cấp phát bộ nhớ lớn chưa chắc là không được.Nhưng cấp phát quá nhiều cho các yêu cầu nhỏ hơn thì sẽ không được.
    Đã được chỉnh sửa lần cuối bởi lttq : 25-10-2011 lúc 07:25 PM.
    Nghe Metal và dịch thơ
    lttqstudy.wordpress.com

  6. #6
    Ngày gia nhập
    09 2011
    Bài viết
    84

    Mặc định hàm malloc hoạt động như thế nào?

    ai nói cho mình hàm mincore có tác dụng gì được không ?
    RISC better than CISC
    phamthechung0@gmail.com

  7. #7
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    Trích dẫn Nguyên bản được gửi bởi hardwire Xem bài viết
    ai nói cho mình hàm mincore có tác dụng gì được không ?
    http://www.kernel.org/doc/man-pages/...mincore.2.html

    thân ^^

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

  1. new và malloc khác nhau như thế nào?
    Gửi bởi ghost_dragonking trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 26-11-2016, 11:00 PM
  2. Kỹ thuật C Xây dựng lại hàm malloc. Viết như thế này có đúng không?
    Gửi bởi panfider1 trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 2
    Bài viết cuối: 25-05-2011, 10:48 AM
  3. Bài tập C++ chuyển câu lệnh này p=(node) malloc(sizeof(node)); qua c++ như thế nào vậy mấy anh
    Gửi bởi trankien trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 34
    Bài viết cuối: 14-05-2011, 10:10 PM
  4. Cơ chế hoạt động của malloc, new và free, delete như thế nào?
    Gửi bởi ghost_dragonking trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 12
    Bài viết cuối: 19-10-2010, 07:53 AM
  5. Thắc mắc về realloc() malloc(). làm sao để copy 1 mảng
    Gửi bởi tonytrinh trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 0
    Bài viết cuối: 01-04-2010, 08:42 AM

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