首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用“属性”标记C中的“指针”

用“属性”标记C中的“指针”
EN

Stack Overflow用户
提问于 2018-08-17 14:14:20
回答 1查看 195关注 0票数 3

我在堆中分配了一个带有malloc的巨大缓冲区,我想编写一个自定义分配器,以便从该缓冲区分配空间。

我现在的问题是,是否有办法在缓冲区中将某些区域标记为“可分配的”、“可写的”和“保留的”,比如在中。

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

代码语言:javascript
运行
复制
   [0][1][2][3][4][5]

能不能用旗子,一点操作什么的?或者我能标记指针吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-17 14:23:46

您可以使用一些简单的东西,比如一个struct数组(或一个linked list),该数组在每个实例中都包含一个标志,您可以将其设置为指示是否允许分配。

例如,使用标志和模糊类型(void *):

代码语言:javascript
运行
复制
typedef struct {
    BOOL alloc; //set TRUE to allow or FALSE to disallow further allocation
    void *space;
    //other members
}BUF;

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

或使用类型的enumunion一起使用的另一种可能性

代码语言:javascript
运行
复制
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;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51897325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档