C++空闲内存空间简单管理

只能管理大小相同的空闲内存块。

原理:主要是利用一个空闲块记录另一个空闲块的地址,形成一个空闲块链。

所以malloc分配的空间至少能够存储一个地址(8B),才能存储

#include <stdlib.h>
#include <iostream>
using namespace std;

typedef struct Node {
    int a;
    int b;
} Node;





int main() {
    char * free_node = nullptr;

    Node* n1 = (Node*) malloc(sizeof(Node)); n1->a = 1;
    Node* n2 = (Node*) malloc(sizeof(Node)); n2->a = 2;
    Node* n3 = (Node*) malloc(sizeof(Node)); n3->a = 3;
    Node* n4 = (Node*) malloc(sizeof(Node)); n4->a = 4;
    Node* n5 = (Node*) malloc(sizeof(Node)); n5->a = 5;

    // 逻辑上释放n1
    printf ("n1: %p\n", n1);
    *((char **)n1) = free_node;
    free_node = (char *)n1;

    // 逻辑上释放n2,追加到n1后面
    printf ("n2: %p\n", n2);
    *((char **)n2) = free_node;
    free_node = (char *)n2;

    // 逻辑上释放n3,追加到n2后面
    printf ("n3: %p\n", n3);
    *((char **)n3) = free_node;
    free_node = (char *)n3;

    // 遍历空闲链表
    char* p = free_node;

	while (p != nullptr) {
	   printf ("%p -> ", p);
	   p = *((char **)p);
	}
    printf ("\n");

    // 从空闲链表上取下一个空闲块
    char* q = free_node;
	free_node = *((char **)q);

    // 遍历空闲链表
    char* p1 = free_node;

	while (p1 != nullptr) {
	   printf ("%p -> ", p1);
	   p1 = *((char **)p1);
	}
    printf ("\n");


    // 物理上释放全部内存
    free(n1);
    free(n2);
    free(n3);
    free(n4);
    free(n5);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值