gpt4 book ai didi

c - 内存和指针

转载 作者:太空狗 更新时间:2023-10-29 15:04:59 25 4
gpt4 key购买 nike

我需要一些帮助来思考一项任务。

我的任务是创建一个内存区域

void *memory = malloc(320);

然后使用指针将文本存储到这个存储位置: 我们想把这个区域分成32个字节的数据 block ,那么我们可以存储: 320/32 = 10个数据 block 一个32个字节。我可以在一个数据 block 中存储(1 个 ASCSII 字符 = 1 个字节)32 个字符。

我有一个 10 长的位图,其中每一位表示是否使用了数据 block (1) 或未使用 (0)。

但是如果我想存储 60 个字符长的文本怎么办?然后我需要 2 个数据 block (2 x 32 字节)。位图显示数据 block 2 和 6 是空闲的,1 和 6 不是并排的。我怎样才能做到这一点?

struct  data {
char * text;
};

typedef struct data d;

d->text = ???

最佳答案

这称为内存碎片,是一个严重的问题。即使在技术上足以支持该 block ,您也必须报告内存不足。

像 C# 这样不允许指针的托管语言(在正常情况下 - 请不要专注于此)可以自由地重新排列底层内存并解决这个问题(尽管它在性能方面不是免费的)。

解决 C: 中的问题
您无能为力,因为那些指向内存的指针会阻止您重新洗牌。其他人提到了伙伴系统,还有其他一些,但很少是简单的。很多都是基于预设的“大块”和“小块”并且只允许小请求小块等......但这一切都是为了首先停止解决问题,一旦你在那里你要么拒绝内存请求或扩展池。

关于c - 内存和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3937848/

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