gpt4 book ai didi

c - "Marking"C 中的指针与 "attributes"

转载 作者:行者123 更新时间:2023-12-02 00:59:11 26 4
gpt4 key购买 nike

我在堆上有一个用 malloc 分配的巨大缓冲区,我想编写一个自定义分配器来从该缓冲区分配空间。

我现在的问题是,是否有办法在该缓冲区中将某些区域“标记”为“可分配”、“可写”和“保留”,就像在内核开发中一样。

例如,我们有一个包含 6 个元素的缓冲区,我如何将元素 2-5 标记为“保留”?

   [0][1][2][3][4][5]

是否可以使用标志、位操作或其他方式?或者我可以标记指针吗?

最佳答案

您可以使用像 struct 数组(或 链表)这样简单的东西,它在每个实例中包含一个标志,您可以设置该标志以指示允许分配,或者不是。
例如,使用标志和不明确的类型 (void *):

typedef struct {
BOOL alloc; //set TRUE to allow or FALSE to disallow further allocation
void *space;
//other members
}BUF;

创建一个BUF数组,并将alloc成员设置为TRUEFALSE来设置实例不再可以更改其内存。当然,这会在初始化期间分配初始内存之后发生。

或者使用 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;

关于c - "Marking"C 中的指针与 "attributes",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51897325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com