帮我写一段c语言的固定内存分配代码
时间: 2023-08-12 11:26:12 浏览: 143
C语言内存管理:静态与动态分配的较量
好的,以下是一个简单的固定内存分配代码示例:
``` c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 定义内存池大小
#define BLOCK_SIZE 10 // 定义内存块大小
char mem_pool[MAX_SIZE]; // 内存池
int mem_index = 0; // 内存池当前索引
void* my_alloc(int size) {
void* ptr = NULL;
if (mem_index + size <= MAX_SIZE) { // 如果内存池剩余空间足够
ptr = &mem_pool[mem_index]; // 分配内存块
mem_index += size; // 更新内存池索引
}
return ptr;
}
void my_free(void* ptr, int size) {
// 因为是固定内存分配,所以不需要释放内存块
// 只需要更新内存池索引即可
mem_index -= size;
}
int main() {
// 分配两个内存块
char* p1 = (char*)my_alloc(BLOCK_SIZE);
char* p2 = (char*)my_alloc(BLOCK_SIZE);
// 使用内存块
snprintf(p1, BLOCK_SIZE, "hello");
snprintf(p2, BLOCK_SIZE, "world");
// 输出结果
printf("%s %s\n", p1, p2);
// 释放内存块
my_free(p1, BLOCK_SIZE);
my_free(p2, BLOCK_SIZE);
return 0;
}
```
在上面的示例代码中,我们定义了一个长度为 100 的内存池 `mem_pool`,并使用 `mem_index` 变量来记录内存池的当前索引。在 `my_alloc` 函数中,我们通过判断内存池剩余空间是否足够来确定是否可以分配内存块,并将分配的内存块地址返回给调用者。在 `my_free` 函数中,我们只需要更新内存池的索引即可,因为固定内存分配不需要释放内存块。
阅读全文