我在堆中分配了一个带有malloc的巨大缓冲区,我想编写一个自定义分配器,以便从该缓冲区分配空间。
我现在的问题是,是否有办法在缓冲区中将某些区域标记为“可分配的”、“可写的”和“保留的”,比如在中。
例如,我们有一个有6个元素的缓冲区,我如何将元素2-5标记为“保留”呢?
[0][1][2][3][4][5]
能不能用旗子,一点操作什么的?或者我能标记指针吗?
发布于 2018-08-17 14:23:46
您可以使用一些简单的东西,比如一个struct
数组(或一个linked list
),该数组在每个实例中都包含一个标志,您可以将其设置为指示是否允许分配。
例如,使用标志和模糊类型(void *
):
typedef struct {
BOOL alloc; //set TRUE to allow or FALSE to disallow further allocation
void *space;
//other members
}BUF;
创建一个BUF
数组,并将alloc
成员设置为TRUE
或FALSE
,以设置一个实例不再可用于更改其内存。当然,在初始化期间分配了初始内存之后,就会发生这种情况。
或使用类型的enum
与union
一起使用的另一种可能性
typedef enum {
_INT,
_UINT,
_CHAR,
_UCHAR,
... //other types
}TYPE;
typedef struct {
BOOL alloc; //set to allow or disallow further allocation
TYPE type; //flag to track type being used in instance
union {
char *cMem;
unsigned char *ucMem;
int *iMem;
unsigned int *uiMem;
... // other members
char *space;
}BUF;
https://stackoverflow.com/questions/51897325
复制相似问题