Trang 2 trên tổng số 5 Đầu tiênĐầu tiên 1234... Cuối cùngCuối cùng
Từ 11 tới 20 trên tổng số 48 kết quả

Đề tài: Bản chất của việc cấp phát bộ nhớ động và giải phóng bộ nhớ

  1. #11
    Ngày gia nhập
    09 2010
    Bài viết
    64

    Mặc định Bản chất của việc cấp phát bộ nhớ động và giải phóng bộ nhớ

    bài viết hay, ví dụ khá là sinh động. Mình xin góp thêm vài phần
    4 segment đó khi biên dịch thì được xác định kích thước cụ thể, hầu hết các trình biên dịch đều cho phép bạn chọn lựa kích thước (tiny, small...) cho 4 vùng này để đáp ứng nhu cầu bộ nhớ khi thực thi chương trình.
    khái niệm con trỏ gần, con trỏ xa (định nghĩa, khai báo, sử dụng...) và mối liên quan của chúng đối với địa chỉ vùng nhớ
    2 vấn đề trên bạn có thể tìm thấy trong sách của Phạm Văn Ất (phần mục lục), cuốn sách nói về C nha (ông có 2 cuốn, 1 cuốn nói về C và 1 cuốn nói về hướng đối tượng). Tuy chỉ giới thiệu chung chung nhưng cũng có thể cho bạn hướng đi tiếp theo để làm sáng tỏ vấn đề

  2. #12
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Update tiếp :
    lập trình bây giờ : khai niệm con trỏ gần con trỏ xa chỉ được dùng trong dos os cũ, với các IDE cũ từ đời tống truyền lại, ko còn tồn tại trong môi trường windows bây giờ nữa
    chỉ có duy nhất con trỏ thôi, 32bit, trỏ hết vùng nhớ VA
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  3. #13
    Ngày gia nhập
    10 2010
    Bài viết
    5

    Trích dẫn Nguyên bản được gửi bởi langman Xem bài viết
    Sau khi chương trình kết thúc , việc bộ nhớ xin cấp phát có được tự giải phóng hay ko thì tùy thuộc vào cài đặt của trình biên dịch và hệ điều hành. Chúng ta có 2 khả năng · Khả năng 1 : trong phần khởi động (trước khi vào function main() ), program xin một khối memory cuả system gọi là XXXX và mỗi lần malloc được gọi thì cấp pháp một phần memory cuả XXXX cho malloc. Do đó, khi program exit thì trả XXXX về cho system là xong. Trong trường hợp này không bị mất memory
    · Khả năng 2 : mỗi lần malloc được gọi thì xin memory từ system . Trường hợp này có thể memory không trả về cho system. Lúc này chương trình sẽ bị gọi là có memory leak.Như vậy sau vài lần chạy sẽ ko còn memory để cấp phát nữa
    Hi Langman,

    Cho mình hỏi rõ hơn về option 2 thông thường malloc thì xin memory từ system nhưng trường hợp đó khi process bị kill or exit thì nó vẫn giải phóng đc vì OS nó đã quản lý việc này, nếu ở option 2 bạn có thể cho ví dụ or code để clear hơn chút.

    Vẫn có thể trong những trường hợp đặc biệt chạy không có OS thì mới có khả năng này [thông thường trong các hệ thống nhúng của micro system]

    Thanks in advance.

  4. #14
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Trích dẫn Nguyên bản được gửi bởi prophet_quest Xem bài viết
    Hi Langman,

    Cho mình hỏi rõ hơn về option 2 thông thường malloc thì xin memory từ system nhưng trường hợp đó khi process bị kill or exit thì nó vẫn giải phóng đc vì OS nó đã quản lý việc này, nếu ở option 2 bạn có thể cho ví dụ or code để clear hơn chút.

    Vẫn có thể trong những trường hợp đặc biệt chạy không có OS thì mới có khả năng này [thông thường trong các hệ thống nhúng của micro system]

    Thanks in advance.
    ví dụ 1 : Mình nhớ ngày trước chạy OS củ, có 1 số game chơi xong nó ko tự giải phóng được bộ nhớ, chơi xong, thoát ra, máy vẫn chạy ùn ùn, khởi động lại mới ngon. cái này chắc bạn gặp nhiều oy,


    ví dụ 2 : Giả sử process A của mình chạy và có 1 vùng nhớ chia sẻ với process B,C xài

    Một vùng nhớ chia sẻ tồn tại độc lập với các tiến trình >> B,C thoát thì vùng nhớ này có thể vẫn chưa được giải phóng do còn A nằm quyền nữa

    sau đó A thoát đột ngột, chưa kịp báo cho OS bít, vậy OS có dám thu hồi vùng nhớ này ko ?


    mình có 1 ví dụ thực tế như này :
    bạn chạy BAV home, bạn đang chạy, remove nó đi, vô thư mục BKAV còn 1 file vẫn ko bị del, bạn có muốn cũng chả del được ngay lập tức ......


    ví dụ 3 : bạn thử code 1 ct cấp phát điên cuồng bộ nhớ,
    bao giờ đến được gần 2gb thì thoát chương trình đột ngột
    rồi cảm nhận xem
    mình thử 2 lần thấy màn hình đen sì lại, mãi chả có khả năng phục hồi, phải reset lai máy



    PS: theo mình nghĩ thì, hệ thống nào cũng phải có OS bạn à, dù là nhỏ xíu (1K 2K ) được gọi là ROM như bên điện tử thì đó vẫn được coi là 1 hệ điều hành mà bạn
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  5. #15
    Ngày gia nhập
    09 2010
    Nơi ở
    lầu xanh-Hà Nội
    Bài viết
    58

    PHP Code:
    #include<stdio.h>
    #include<conio.h>
    #include<time.h>
    #include<stdlib.h>

    // Ham Nhap

    void Nhap(int* &a,long &n)
    {
    printf("\n n= ");
    scanf("%ld",&n);

    a=new int[n*n];

      for (
    int i=0;i<n;i++)

        for (
    int j=0;j<n;j++)
           {
            
    //printf("Nhap a[%d][%d]: ",i,j);
            //scanf("%d",&a[i*n+j]);
            
    a[i*n+j]=rand();
            }
    }

    // Ham In

    void In(intalong n)
    {
        
    printf("\n");
        for(
    int i=0;i<n;i++)
         {
           
    printf("\n");
          for(
    int j=0;j<n;j++)
            {
            
    printf(" %3d",a[i*n+j]);
            }
         }

    }

    // Ham Chia Nho Ma Tran x thanh 4 phan a,b,c,d

    void ChiaNho(long nintxint* &aint* &bint* &cint* &d)
    {
        
    long m=n/2;
        
    int i,j;

        for(
    i=0;i<m;i++)
          for(
    j=0;j<m;j++)
             
    a[i*m+j]=x[i*n+j];

        for(
    i=0;i<m;i++)
          for(
    j=m;j<n;j++)
             
    b[i*m+j-m]=x[i*n+j];

        for(
    i=m;i<n;i++)
          for(
    j=0;j<m;j++)
             
    c[(i-m)*m+j]=x[i*n+j];

        for(
    i=m;i<n;i++)
          for(
    j=m;j<n;j++)
             
    d[(i-m)*m+j-m]=x[i*n+j];
    }

    // Ham Cong

    void CongMaTran(long nintaint*bintclong &congstr)
    {
        for(
    int i=0;i<n;i++)
          for(
    int j=0;j<n;j++)
            {
              
    c[i*n+j]=a[i*n+j]+b[i*n+j];
              
    congstr++;
            }
    }

    // Ham Nhan 2 Ma Tran Voi n=2

    void NhanMaTran(intaintbint* &clong &nhanstrlong &congstr)
    {
        
    int m1m2m3m4m5m6m7;
        
    m1=(a[0*2+1]-a[1*2+1])*(b[1*2+0]+b[1*2+1]);
        
    m2=(a[0*2+0]+a[1*2+1])*(b[0*2+0]+b[1*2+1]);
        
    m3=(a[0*2+0]-a[1*2+0])*(b[0*2+0]+b[0*2+1]);
        
    m4=(a[0*2+0]+a[0*2+1])*b[1*2+1];
        
    m5=a[0*2+0]*(b[0*2+1]-b[1*2+1]);
        
    m6=a[1*2+1]*(b[1*2+0]-b[0*2+0]);
        
    m7=(a[1*2+0]+a[1*2+1])*b[0*2+0];

        
    c[0*2+0]=m1+m2-m4+m6;
        
    c[0*2+1]=m4+m5;
        
    c[1*2+0]=m6+m7;
        
    c[1*2+1]=m2-m3+m5-m7;

        
    congstr=congstr+18;
        
    nhanstr=nhanstr+7;
    }

    // Ham To Hop 4 Ma Tran a,b,c,d thanh Ma Tran x

    void ToHop(long nint* &xintaintbintcintd)
    {
        
    long m=n/2;
        
    int i,j;

        for(
    i=0;i<m;i++)
          for(
    j=0;j<m;j++)
             
    x[i*n+j]=a[i*m+j];

        for(
    i=0;i<m;i++)
          for(
    j=m;j<n;j++)
             
    x[i*n+j]=b[i*m+j-m];

        for(
    i=m;i<n;i++)
          for(
    j=0;j<m;j++)
             
    x[i*n+j]=c[(i-m)*m+j];

        for(
    i=m;i<n;i++)
          for(
    j=m;j<n;j++)
             
    x[i*n+j]=d[(i-m)*m+j-m];
    }

    // Nhan 2 Ma Tran Bang Phuong Phap Thong Thuong

    void Nhan2MaTran(intaintbint* &clong nlong &nhanbtlong &congbt)
    {
        for(
    int i=0;i<n;i++)
          for(
    int j=0;j<n;j++)
            {
            
    c[i*n+j]=0;
            for(
    int k=0;k<n;k++)
             {
              
    c[i*n+j]=c[i*n+j]+a[i*n+k]*b[k*n+j];
             }
            }
        
    congbt=n*n*(n-1);
        
    nhanbt=n*n*n;
    }

    // Thuat Toan Strassen

    void Strassen(intaintbint* &cint nlong &nhanstrlong &congstr)
    {
        if(
    n==2)
            
    NhanMaTran(abcnhanstrcongstr);
        else
          {
            
    intd1=new int[n*n];
            
    intd2=new int[n*n];
            
    inta00=new int[n*n];
            
    inta01=new int[n*n];
            
    inta10=new int[n*n];
            
    inta11=new int[n*n];
            
    intb00=new int[n*n];
            
    intb01=new int[n*n];
            
    intb10=new int[n*n];
            
    intb11=new int[n*n];
            
    intc00=new int[n*n];
            
    intc01=new int[n*n];
            
    intc10=new int[n*n];
            
    intc11=new int[n*n];

            
    ChiaNho(naa00a01a10a11);
            
    ChiaNho(nbb00b01b10b11);
            
    ChiaNho(ncc00c01c10c11);

            
    Strassen(a00b00d1n/2nhanstrcongstr);
            
    Strassen(a01b10d2n/2nhanstrcongstr);
            
    CongMaTran(n/2d1d2c00congstr);

            
    Strassen(a00b01d1n/2nhanstrcongstr);
            
    Strassen(a01b11d2n/2nhanstrcongstr);
            
    CongMaTran(n/2d1d2c01congstr);

            
    Strassen(a10b00d1n/2nhanstrcongstr);
            
    Strassen(a11b10d2n/2nhanstrcongstr);
            
    CongMaTran(n/2d1d2c10congstr);

            
    Strassen(a10b01d1n/2nhanstrcongstr);
            
    Strassen(a11b11d2n/2nhanstrcongstr);
            
    CongMaTran(n/2d1d2c11congstr);

            
    ToHop(ncc00c01c10c11);
          }
    }

    // Ham Chinh

    void main()
    {
       
    clrscr();
       
    inta;
       
    intb;
       
    intc;
       
    intd;
       
    long n,congbt=0,nhanbt=0,congstr=0,nhanstr=0;
        
    printf("\n Ma Tran a: ");
        
    Nhap(a,n);
        
    printf("\n Ma Tran b: ");
        
    Nhap(b,n);
          
    In(a,n);
          
    In(b,n);
        
    Nhan2MaTran(a,b,d,n,nhanbt,congbt);
          
    printf("\n Ket Qua Bai Toan Tinh Bang Phuong Phap thong thuong");
          
    In(d,n);
        
    Strassen(a,b,c,n,nhanstr,congstr);
          
    printf("\n Ket Qua Bai Toan Tinh Bang Phuong Phap Strassen ");
          
    In(c,n);

        
    printf("\n Nhan theo phuong phap binh thuong can: %ld Phep Nhan va %ld Phep Cong(Tru)",nhanbt,congbt);
        
    printf("\n Nhan theo phuong phap strassen can:    %ld Phap NHan va %ld Phep Cong(Tru)",nhanstr,congstr);
       
    getch();

    cho mình hỏi với bài toán nhân Strassen như thế này, khi nhập n=2^x. n=64 thì trình C out luôn hoặc hiện 1 dòng gì đó bắt mình phải bấm Close và C tự tắt :( hixx. mình nghĩ là lỗi do cập phát bô nhớ nhưng không biết sửa kiểu gì, giúp mình với :(
    Anh bạn dãi dầu không code nữa.
    Gục lên laptop bỏ quên đời!

  6. #16
    Ngày gia nhập
    10 2010
    Bài viết
    15

    Mặc định Bản chất của việc cấp phát bộ nhớ động và giải phóng bộ nhớ

    Cho mình hỏi là làm sao để cấp phát bộ nhớ khủng. Kiểu int và kiểu Malloc, cái nào hơn, mình cần khai báo 1 mảng khoảng 128*128 phần tử trên C
    Tôi sẽ là cao thủ trong làng C việt ^^

  7. #17
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Trích dẫn Nguyên bản được gửi bởi cocain Xem bài viết
    PHP Code:
    #include<stdio.h>
    #include<conio.h>
    #include<time.h>
    #include<stdlib.h>

    // Ham Nhap

    void Nhap(int* &a,long &n)
    {
    printf("\n n= ");
    scanf("%ld",&n);

    a=new int[n*n];

      for (
    int i=0;i<n;i++)

        for (
    int j=0;j<n;j++)
           {
            
    //printf("Nhap a[%d][%d]: ",i,j);
            //scanf("%d",&a[i*n+j]);
            
    a[i*n+j]=rand();
            }
    }

    // Ham In

    void In(intalong n)
    {
        
    printf("\n");
        for(
    int i=0;i<n;i++)
         {
           
    printf("\n");
          for(
    int j=0;j<n;j++)
            {
            
    printf(" %3d",a[i*n+j]);
            }
         }

    }

    // Ham Chia Nho Ma Tran x thanh 4 phan a,b,c,d

    void ChiaNho(long nintxint* &aint* &bint* &cint* &d)
    {
        
    long m=n/2;
        
    int i,j;

        for(
    i=0;i<m;i++)
          for(
    j=0;j<m;j++)
             
    a[i*m+j]=x[i*n+j];

        for(
    i=0;i<m;i++)
          for(
    j=m;j<n;j++)
             
    b[i*m+j-m]=x[i*n+j];

        for(
    i=m;i<n;i++)
          for(
    j=0;j<m;j++)
             
    c[(i-m)*m+j]=x[i*n+j];

        for(
    i=m;i<n;i++)
          for(
    j=m;j<n;j++)
             
    d[(i-m)*m+j-m]=x[i*n+j];
    }

    // Ham Cong

    void CongMaTran(long nintaint*bintclong &congstr)
    {
        for(
    int i=0;i<n;i++)
          for(
    int j=0;j<n;j++)
            {
              
    c[i*n+j]=a[i*n+j]+b[i*n+j];
              
    congstr++;
            }
    }

    // Ham Nhan 2 Ma Tran Voi n=2

    void NhanMaTran(intaintbint* &clong &nhanstrlong &congstr)
    {
        
    int m1m2m3m4m5m6m7;
        
    m1=(a[0*2+1]-a[1*2+1])*(b[1*2+0]+b[1*2+1]);
        
    m2=(a[0*2+0]+a[1*2+1])*(b[0*2+0]+b[1*2+1]);
        
    m3=(a[0*2+0]-a[1*2+0])*(b[0*2+0]+b[0*2+1]);
        
    m4=(a[0*2+0]+a[0*2+1])*b[1*2+1];
        
    m5=a[0*2+0]*(b[0*2+1]-b[1*2+1]);
        
    m6=a[1*2+1]*(b[1*2+0]-b[0*2+0]);
        
    m7=(a[1*2+0]+a[1*2+1])*b[0*2+0];

        
    c[0*2+0]=m1+m2-m4+m6;
        
    c[0*2+1]=m4+m5;
        
    c[1*2+0]=m6+m7;
        
    c[1*2+1]=m2-m3+m5-m7;

        
    congstr=congstr+18;
        
    nhanstr=nhanstr+7;
    }

    // Ham To Hop 4 Ma Tran a,b,c,d thanh Ma Tran x

    void ToHop(long nint* &xintaintbintcintd)
    {
        
    long m=n/2;
        
    int i,j;

        for(
    i=0;i<m;i++)
          for(
    j=0;j<m;j++)
             
    x[i*n+j]=a[i*m+j];

        for(
    i=0;i<m;i++)
          for(
    j=m;j<n;j++)
             
    x[i*n+j]=b[i*m+j-m];

        for(
    i=m;i<n;i++)
          for(
    j=0;j<m;j++)
             
    x[i*n+j]=c[(i-m)*m+j];

        for(
    i=m;i<n;i++)
          for(
    j=m;j<n;j++)
             
    x[i*n+j]=d[(i-m)*m+j-m];
    }

    // Nhan 2 Ma Tran Bang Phuong Phap Thong Thuong

    void Nhan2MaTran(intaintbint* &clong nlong &nhanbtlong &congbt)
    {
        for(
    int i=0;i<n;i++)
          for(
    int j=0;j<n;j++)
            {
            
    c[i*n+j]=0;
            for(
    int k=0;k<n;k++)
             {
              
    c[i*n+j]=c[i*n+j]+a[i*n+k]*b[k*n+j];
             }
            }
        
    congbt=n*n*(n-1);
        
    nhanbt=n*n*n;
    }

    // Thuat Toan Strassen

    void Strassen(intaintbint* &cint nlong &nhanstrlong &congstr)
    {
        if(
    n==2)
            
    NhanMaTran(abcnhanstrcongstr);
        else
          {
            
    intd1=new int[n*n];
            
    intd2=new int[n*n];
            
    inta00=new int[n*n];
            
    inta01=new int[n*n];
            
    inta10=new int[n*n];
            
    inta11=new int[n*n];
            
    intb00=new int[n*n];
            
    intb01=new int[n*n];
            
    intb10=new int[n*n];
            
    intb11=new int[n*n];
            
    intc00=new int[n*n];
            
    intc01=new int[n*n];
            
    intc10=new int[n*n];
            
    intc11=new int[n*n];

            
    ChiaNho(naa00a01a10a11);
            
    ChiaNho(nbb00b01b10b11);
            
    ChiaNho(ncc00c01c10c11);

            
    Strassen(a00b00d1n/2nhanstrcongstr);
            
    Strassen(a01b10d2n/2nhanstrcongstr);
            
    CongMaTran(n/2d1d2c00congstr);

            
    Strassen(a00b01d1n/2nhanstrcongstr);
            
    Strassen(a01b11d2n/2nhanstrcongstr);
            
    CongMaTran(n/2d1d2c01congstr);

            
    Strassen(a10b00d1n/2nhanstrcongstr);
            
    Strassen(a11b10d2n/2nhanstrcongstr);
            
    CongMaTran(n/2d1d2c10congstr);

            
    Strassen(a10b01d1n/2nhanstrcongstr);
            
    Strassen(a11b11d2n/2nhanstrcongstr);
            
    CongMaTran(n/2d1d2c11congstr);

            
    ToHop(ncc00c01c10c11);
          }
    }

    // Ham Chinh

    void main()
    {
       
    clrscr();
       
    inta;
       
    intb;
       
    intc;
       
    intd;
       
    long n,congbt=0,nhanbt=0,congstr=0,nhanstr=0;
        
    printf("\n Ma Tran a: ");
        
    Nhap(a,n);
        
    printf("\n Ma Tran b: ");
        
    Nhap(b,n);
          
    In(a,n);
          
    In(b,n);
        
    Nhan2MaTran(a,b,d,n,nhanbt,congbt);
          
    printf("\n Ket Qua Bai Toan Tinh Bang Phuong Phap thong thuong");
          
    In(d,n);
        
    Strassen(a,b,c,n,nhanstr,congstr);
          
    printf("\n Ket Qua Bai Toan Tinh Bang Phuong Phap Strassen ");
          
    In(c,n);

        
    printf("\n Nhan theo phuong phap binh thuong can: %ld Phep Nhan va %ld Phep Cong(Tru)",nhanbt,congbt);
        
    printf("\n Nhan theo phuong phap strassen can:    %ld Phap NHan va %ld Phep Cong(Tru)",nhanstr,congstr);
       
    getch();

    cho mình hỏi với bài toán nhân Strassen như thế này, khi nhập n=2^x. n=64 thì trình C out luôn hoặc hiện 1 dòng gì đó bắt mình phải bấm Close và C tự tắt :( hixx. mình nghĩ là lỗi do cập phát bô nhớ nhưng không biết sửa kiểu gì, giúp mình với :(
    bạn ơi
    ở đây ko trả lời hỏi đáp dạng này, bạn có thể qua box hỏi đáp đặt câu hỏi và mình sẽ trả lời bạn

    Trích dẫn Nguyên bản được gửi bởi phuonggm Xem bài viết
    Cho mình hỏi là làm sao để cấp phát bộ nhớ khủng. Kiểu int và kiểu Malloc, cái nào hơn, mình cần khai báo 1 mảng khoảng 128*128 phần tử trên C
    phuonggm à, ý bạn có phải hỏi là cấp phát tĩnh dạng int a[][] và cấp phát động dùng malloc à

    2 cái ni , cái nào hơn thì khó nói quá, có nhiều khía cạnh để đánh giá lắm,
    theo langman thấy thì, trên 1 cái bàn có nhiều loại dao khác nhau, tùy vào từng trường hợp cụ thể mà ta chọn con dao nào để giết con vật nào



    128*128 phần tử int thì chỉ cỡ tầm 64KB thôi bạn à, cũng ko quá lớn mà,

    vấn đề bạn hỏi nếu phân tích tỉ mỉ ra thì cũng khá loằng ngoằng đấy

    ví dụ nhé, ở trong C thuần túy trên môi trường 16 bit,
    ở mô hình small, medium thì ko thể
    nhưng ở mô hình large thì bạn có thể dùng con trỏ near để cấp phát bộ nhớ

    còn trong cmd, việc cấp phát 6KB ko quá phức tạp, bạn hoàn toàn có thể cấp phát mà
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  8. #18
    Ngày gia nhập
    10 2010
    Bài viết
    15

    Thực ra cái mình muốn hỏi là kiểu khai báo trong bài đó thôi langman à. bạn có thể test dùm mình được không. Trong bài mình cấp phát bộ nhớ cho mảng 2 chiều theo kiểu 1 chiều, và trong bài toán phải cấp phát bộ nhớ rất nhiều, mình cũng đã cố gắng giải phóng nhưng không được. langman có thể test dùm mình không
    Tôi sẽ là cao thủ trong làng C việt ^^

  9. #19
    Ngày gia nhập
    10 2010
    Bài viết
    15

    Mình làm phiền langman thêm 1 chút. Giả sử bây giờ mình cần nhập vào 1 mảng a kiểu con trỏ. Tức là mình phải cấp phát bộ nhớ cho a. sau đó gán các địa chỉ của mảng = 1 giá trị nào đó. Sau đó free(a). Sau đó nhập b, lúc này ta lại cấp phát cho b. Hỏi, liệu có xảy ra xung đột gì ở đây k
    Tôi sẽ là cao thủ trong làng C việt ^^

  10. #20
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Trích dẫn Nguyên bản được gửi bởi langman Xem bài viết
    ví dụ 1 : Mình nhớ ngày trước chạy OS củ, có 1 số game chơi xong nó ko tự giải phóng được bộ nhớ, chơi xong, thoát ra, máy vẫn chạy ùn ùn, khởi động lại mới ngon. cái này chắc bạn gặp nhiều oy,


    ví dụ 2 : Giả sử process A của mình chạy và có 1 vùng nhớ chia sẻ với process B,C xài

    Một vùng nhớ chia sẻ tồn tại độc lập với các tiến trình >> B,C thoát thì vùng nhớ này có thể vẫn chưa được giải phóng do còn A nằm quyền nữa

    sau đó A thoát đột ngột, chưa kịp báo cho OS bít, vậy OS có dám thu hồi vùng nhớ này ko ?


    mình có 1 ví dụ thực tế như này :
    bạn chạy BAV home, bạn đang chạy, remove nó đi, vô thư mục BKAV còn 1 file vẫn ko bị del, bạn có muốn cũng chả del được ngay lập tức ......


    ví dụ 3 : bạn thử code 1 ct cấp phát điên cuồng bộ nhớ,
    bao giờ đến được gần 2gb thì thoát chương trình đột ngột
    rồi cảm nhận xem
    mình thử 2 lần thấy màn hình đen sì lại, mãi chả có khả năng phục hồi, phải reset lai máy



    PS: theo mình nghĩ thì, hệ thống nào cũng phải có OS bạn à, dù là nhỏ xíu (1K 2K ) được gọi là ROM như bên điện tử thì đó vẫn được coi là 1 hệ điều hành mà bạn
    hệ điều hành có cung cấp một số signals để cho chương trình ứng xử với nó. Vì thế chương trình của langman có thoát đột ngột thế nào cũng không thoát ra khoải cái màn xô đấy.

    Tuy sẽ có một số trường hợp khiến bạn phải tắt máy, đó là vì hệ điều hành đón nhận các thông điệp mà chương trình gửi quá chậm, (CPU còn đang mắc dở với em hàng xóm mà).

    Kevin chưa đọc kỹ hết, nhưng Langman viết bài này hay đấy.
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

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

  1. Trả lời: 1
    Bài viết cuối: 09-03-2014, 08:09 PM
  2. Trả lời: 0
    Bài viết cuối: 07-05-2013, 09:40 AM
  3. Trả lời: 1
    Bài viết cuối: 09-03-2013, 10:08 AM
  4. Chung Cư 257 Giải Phóng, st/cn Chung Cư 257 Giải Phóng với DT: 81m, 33tr
    Gửi bởi datphat191 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 16-02-2012, 01:37 PM
  5. Giải phóng bộ nhớ như thế nào để chương trình chạy nhanh?
    Gửi bởi toanhoi trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 03-09-2010, 01:14 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