C语言:模拟掷硬币过程,filp out作为模拟函数

1679人阅读
动态存储器分配器维护着一个进程的虚拟的存储器区域,称为堆(heap)。分配器将堆视为一组不同大小的块的集合来维护。每个块就是一个连续的虚拟存储器片(chunk),要么是已经分配的,要么是空闲的。
我们这里把内存堆空间模拟为一个字节数组buf[1000],块的数据结构为:
typedef struct HeadStruct{
&&&& size_
&&&& void *
&&&& struct HeadStruct *pre,*
堆的组织方式为双向链表。要实现malloc函数,就必须考虑几个问题:
1 空闲块的组织:我们如何记录空闲块
2 放置:我们如何选择一个合适的空闲块来放置一个新分配的块
3 分割:在我们将一个新分配的块放置在某一个空闲块之后,如何处理这个空闲块的剩余部分
4 合并:我们如何处理一个刚刚被释放的块
程序实现如下:
#include &stdio.h&
#include &stdlib.h&
#define HeadSize (sizeof(HeadStruct))
char buf[1000];//模拟内存堆
typedef struct HeadStruct{
size_//块的大小
void *//有效的载荷
struct HeadStruct *pre,*//前驱和后继,用双向链表实现堆
//表明此块空闲与否
}HeadS//堆中块的结构体
void Init_heap()
HeadStruct *p=(HeadStruct *)
p-&size=sizeof(buf)-HeadS
p-&buf=(char *)p + HeadS//p should be cast to char*
p-&pre=p-&next=NULL;
p-&used=0;
void list_blocks()
HeadStruct *p=(HeadStruct *)
printf(&addr:%d,size:%d,used:%d\n&,(char *)(p-&buf)-buf,p-&size,p-&used);
void *myalloc(size_t size)
HeadStruct *p=(HeadStruct *)
while(!((p!=NULL)&&(p-&size-size&HeadSize)&&(p-&used==0)))
if(p==NULL)
printf(&ERROR!&);
return NULL;
HeadStruct *rest=(HeadStruct *)((char *)(p-&buf)+size);
rest-&buf=(char *)rest+HeadS
rest-&size=p-&size-size-HeadS
rest-&next=p-&
if(p-&next)
p-&next-&pre=
rest-&pre=p;
rest-&used=0;
p-&used=1;
return p-&
void myFree(void *mem)
HeadStruct *actual=(HeadStruct *)((char *)mem-HeadSize);
//堆增长的方式是向高地址增长,要找到块的首地址就的减去块头的大小
if(!mem || 0==actual-&used)
printf(&FREE ERROR!&);
actual-&used=0;
HeadStruct *
if(actual-&next && actual-&next-&used==0)
actual-&size+=actual-&next-&size+HeadS
tmp=actual-&next-&
actual-&next=
if(actual-&pre && actual-&pre-&used==0)
actual-&pre-&size+=actual-&size+HeadS
actual-&pre-&next=actual-&
if(actual-&next)
actual-&next-&pre=actual-&
int main()
Init_heap();
list_blocks();
int *a=(int *)myalloc(sizeof(int)*100);
list_blocks();
char *b=(char *)myalloc(sizeof(char)*100);
list_blocks();
myFree(a);
myFree(b);
list_blocks();
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:27013次
排名:千里之外
原创:18篇
(1)(1)(3)(1)(1)(1)(1)(5)(1)(9)(1)某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出,请编写函数,其功能是:求出该学生的平均分,并放入记录的ave成员中。
例如,..._考试资料网
hot热门搜索
问答题参考答案void fun(STREC*a)
a->ave=0.0:
for(i=0;i<N;i++)
a->ave=a->ave+a->s[i];
你可能喜欢
填空题 参考答案seore[i]或*(score+i)[切换科目]
以下试题来自:
单项选择题下列叙述中正确的是A.C语言程序是由过程和函数组成的B.C语言函数可以嵌套调用,例如:fun(fun(x))C.C语言函数不可以单独编译D.C语言中除了main函数,其他函数不可作为单独文件形式存在
为您推荐的考试题库
你可能感兴趣的试题
1A.0B.1C.4D.82A.选择B.投影C.交D.并3A.9,18B.8,11C.7,11D.10,144A.C语言中的注释不可以夹在变量名或关键字的中间B.C语言中的变量可以在使用之前的任何位置进行定义C.在C语言算术表达式的书写中,运算符两侧的运算数类型必须一致D.C语言的数值常量中夹带空格不影响常量值的正确表示5A.m=6B.m=2C.m=4D.m=5
热门相关试卷
最新相关试卷C语言:模拟实现strstr函数,若是子串,输出子串后面的字符串,否则输出null
#define _CRT_SECURE_NO_WARNINGS 1
#include&stdio.h&
#include&assert.h&
#include&stdlib.h&
char *my_strstr(char *arr1, char *arr2)
assert(arr1);
assert(arr2);
char *s1 = arr1;
char *p = arr2;
char *s2 =
while (*s1 != '\0')
while ((*s1 != '\0') && (*s2 != '\0') && (*s1 == *s2))
if (*s2 == '\0')
return s1;
return NULL;
int main()
char *arr1 = &abcdeff&;
char *arr2 = &abc&;
char *ret = my_strstr(arr1, arr2);
printf(&%s&, ret);
system(&pause&);
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'C语言程序改错 功能:编程模拟实现库函数strcmp的部分功能_百度知道
C语言程序改错 功能:编程模拟实现库函数strcmp的部分功能
/zhidao/pic/item/6a63fdcea022c1f4c510fd8f9a147://d.baidu.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="http.hiphotos://d.jpg" esrc="/zhidao/wh%3D450%2C600/sign=/zhidao/wh%3D600%2C800/sign=de9b0c09e2ad9fe2bb12e/6a63fdcea022c1f4c510fd8f9a147://d.baidu.hiphotos<a href="http
提问者采纳
scanf(&;c语言中 判断相等 是用
这是个改错题吧
//&#47:s[i]==t[i]
/ 因为t本身就是一个地址了
所以不用加取地址符了error 2,t);%s&quot
提问者评价
其他类似问题
为您推荐:
其他1条回答
或gets(t),t);;%s&quoterror之间用scanf(&推荐用gets(t)
strcmp的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 filp out 的文章

 

随机推荐