"Marking" C 中的指针 "attributes"
"Marking" Pointers in C with "attributes"
我在堆上有一个用 malloc 分配的巨大缓冲区,我想编写一个自定义分配器从该缓冲区分配 space。
我现在的问题是,是否有办法在该缓冲区中 "mark" 某些区域,例如 "allocatable"、"writable" 和 "reserved",就像在内核开发中一样。
例如,我们有一个包含 6 个元素的缓冲区,我如何将元素 2-5 标记为 "reserved"?
[0][1][2][3][4][5]
是否可以使用标志、位操作或其他方式?
或者我可以标记指针吗?
您可以使用像 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;
将buffer的个数转换成unsigned int的位数组,并用内存索引来标记。
例如:unsigned int allocatable [((x) +31)>>5];
可写和保留类似。
我在堆上有一个用 malloc 分配的巨大缓冲区,我想编写一个自定义分配器从该缓冲区分配 space。
我现在的问题是,是否有办法在该缓冲区中 "mark" 某些区域,例如 "allocatable"、"writable" 和 "reserved",就像在内核开发中一样。
例如,我们有一个包含 6 个元素的缓冲区,我如何将元素 2-5 标记为 "reserved"?
[0][1][2][3][4][5]
是否可以使用标志、位操作或其他方式? 或者我可以标记指针吗?
您可以使用像 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;
将buffer的个数转换成unsigned int的位数组,并用内存索引来标记。 例如:unsigned int allocatable [((x) +31)>>5]; 可写和保留类似。