Sự khác nhau giữa cấp phát tĩnh và cấp phát động?

Cấp phát bộ nhớ tĩnh

Khi khai báo các biến (int, float,..), mảng, chuỗi kí tự,(int a[20], char s[30]).. Trình biên dịch cấp phát vùng nhớ (static memory) cho các biến này. Vì vùng nhớ giành cho các (biến, mảng, chuỗi,..) là static memory nên việc gán con trỏ tới vùng nhớ tĩnh được gọi là cấp phát bộ nhớ tĩnh. Vùng nhớ được cấp phát trong lúc biên dịch.

#include <stdio.h>
#include <conio.h>

void main()
{
    char s[] = "vncoding forum";
    char *p = &s[0];
    printf("%s", p);
    getch();
}
Cấp phát bộ nhớ tĩnh
Cấp phát bộ nhớ tĩnh

Cấp phát bộ nhớ động

Sử dụng hàm malloc(), calloc() để cấp phát bộ nhớ động. Giá trị trả về của malloc(), calloc() là con trỏ trỏ tới vùng nhớ được cấp phát. Vùng nhớ được cấp phát trong lúc chạy chương trình (runtime)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

void main()
{
    char *s = (char*)malloc(30);
    if (s)
    {
        strcpy(s, "vncoding forum");
        printf("%s", s);
        free(s);
    }
    getch();
}
Cấp phát bộ nhớ động
Cấp phát bộ nhớ động

Be the first to comment

Leave a Reply