C语言 内存预分配的问题

来源:百度知道 编辑:UC知道 时间:2024/06/18 09:40:49
在实际项目应用中,频繁地在堆中分配内存会造成系统效率降低,所以我们在需要进行频繁动态分配内存的时候一般是先分配一个相对比较大的空间,然后再在这个空间中去拿一部分来进行使用。

要求:
预分配的内存块大小为1024字节
内存块分配大小固定
假设单次分配内存大小不超过1024字节
如内存不够,则增加预分配内存块。
初步代码如下:

#define MEMORY_BLOCK_SIZE 1024 //每次增加分配的内存的大小.

typedef struct _STRUCT_TEST
{
int a;
char str[500];
}STRUCT_TEST;

int main()
{
//初始化一次性分配的内存
initMemory(); //本句为伪代码,除函数命令外均可修改

int *pInt = getMemory(sizeof(int));
*pInt = 5;

double *pDouble = getMemory(sizeof(double));
*pDouble = 10000;

char *pChar = getMemory(sizeof(char));
*pChar = 'S';

char *pStr =getMemory(20);
strcpy(pStr,"hello world");

//①

STRUCT_TEST *pStruct = getMemory(sizeof(STRUCT_TEST));
pStruct->a =8;
strcpy(pStruct->str,"hello c");

printf("int = |%d|,double = |%d| \n char = |%c| \

#include <stdio.h>
#include <string.h>
#include <malloc.h>

#define MBKSIZE 1024

typedef struct test {
int num;
char str[500];
} MTEST;

typedef struct mem {
char *mblock;
int size;
int used;
} MEM;

MEM mb;

void initmem(void)
{
mb.mblock=(char*)malloc(MBKSIZE);
mb.size=MBKSIZE;
mb.used=0;
}

void *getmem(int size)
{
if(mb.size-mb.used<size)
{
mb.size+=MBKSIZE;
mb.mblock=(char*)realloc(mb.mblock,mb.size);
}

mb.used+=size;

return &mb.mblock[mb.used-size];
}

int main(void)
{
int *pint;
double *pdbl;
char *pchr,*pstr;
MTEST* pstu,*pstue;

initmem();

pint=(int*)getmem(sizeof(int));
*pint=5;
pdbl=(double*)getmem(si