use*_*767 5 c memory pointers heap-fragmentation
我需要一些关于任务的一些帮助.
我的任务是创建一个内存区域
void *memory = malloc(320);
Run Code Online (Sandbox Code Playgroud)
然后使用指针将文本存储到这个存储位置:我们想将这个区域划分为32个字节的数据块,母猪我们可以存储:320/32 = 10个数据块,32个字节.在一个数据块中,我可以存储(1个ASCSII char = 1个字节)32个字符.
我有一个10位的位图,其中每个位指示是否使用数据块(1)或不使用(0).
但是,如果我想存储长度为60个字符的文本呢?然后我需要2个数据块(2 x 32字节).位图显示数据块2和6是空闲的,1和6不是并排的.我怎样才能做到这一点?
struct data {
char * text;
};
typedef struct data d;
d->text = ???
Run Code Online (Sandbox Code Playgroud)
这称为内存碎片,是一个严重的问题。即使技术上有足够的内存来支持该块,您也必须报告内存不足。
像 C# 这样不允许指针的托管语言(在正常情况下 - 请不要关注这一点)可以自由地重新排列底层内存并解决这个问题(尽管它在性能方面不是免费的)。
要解决 C 中的问题:
您无能为力,因为这些指向内存的指针会阻止您重新排列所有内容。其他人提到过好友系统,还有其他系统,但很少有简单的。很多都是基于预设的“大块”和“小块”,并且只允许小请求、小块等……但这一切都是为了首先停止解决问题,一旦你在那里,你要么否认内存请求或扩展池。