首页
编程语言
数据库
网络开发
Algorithm算法
移动开发
系统相关
金融统计
人工智能
其他
首页
>
> 详细
讲解CSE 109、讲解C/C++编程设计、辅导Systems Programming、辅导C/C++ 调试Web开发|辅导Python编程
CSE 109: Systems Programming
Fall 2018
Program 4: Due on Sunday, October 21st at 9pm on CourseSite.
Checkpoint Due: Due on Monday, October 15th at 9pm via checkpointer.
Collaboration Reminder:
1. You must submit your own work.
2. In particular, you may not:
(a) Show your code to any of your classmates
(b) Look at or copy anyone else’s code
(c) Copy material found on the internet
(d) Work together on an assignment
Assignment: Preparation
1. Make a Prog4 directory in your class folder.
2. Create the files Allocator.c, Allocator.h, Allocation.c and Allocation.h
3. You can use whatever tester you want for this. We will provide a
prog4.o that you can link to your code for testing purposes.
4. We also will provide an object and header file that you must link to
your code to provide the Allocator::printAllocations(...) function (see
printAllocations.h and printAllocations.o).
5. All source code files must have the comment block as shown at the end
of this document. All files must be contained in your Prog4 directory.
Assignment:
You will be creating a basic memory allocator, non-optimized, that
can fulfill memory requests made by users.
11. Allocation.h and Allocation.c. Make sure you put the appropriate
material into each file.
(a) Each Allocation t object will contain a size t to represent the
starting offset of the allocation as well as the size of the allocation.
(b) void makeAllocation(struct Allocation t* it, size t start, size t
size): Constructs the allocation object with the given values.
Note that the Allocation t objects are not aware of the constraints
of the allocator and must not care either. We won’t return
anything - just modify that space you are pointed to. Nothing
should stop the user from making an invalid allocation, they
must use doesOverlap to ensure this does not happen.
(c) void freeAllocation(struct Allocation t* it): Destroys the contents
of the Allocation t object. User is responsible for assigning
to NULL afterwards, therefore, we return nothing and do not free
the actual Allocation t object.
(d) size t getStart(struct Allocation t* it): Returns the starting location
of the allocation.
(e) size t getEnd(struct Allocation t* it): Returns the ending location
of the allocation (not inclusive).
(f) size t getSize(struct Allocation t* it): Returns the size of the
allocation.
(g) int doesOverlap(struct Allocation t* it, size t start, size t size):
Returns 1 if theAllocation t object would overlap with the given
range. Returns 0 otherwise. Use this before creating a new Allocation
t object to validate that start and size do not conflict
with any existing Allocation t object.
2. Allocator.h and Allocator.c. Make sure you put the appropriate material
into each file.
(a) Define the Allocator t structure.
i. It must contain a void* called memory that points to the
chunk of memory that the Allocator t object is using.
ii. A size t to represent the capacity of the allocator.
This must be a multiple of 16.
This reflects alignment for long double on a 64-bit Intel
machine.
2iii. A dynamically resizable list of Allocation t objects as well as
size t fields to represent size and capacity of this list.
When expanding, expand by doubling capacity and then
adding 1.
iv. The amount of memory used by the Allocator t object to
track allocations must scale linearly with the number of active
allocations, not the amount of total memory.
(b) void makeAllocator(struct Allocator t* it, size t capacity): Constructs
an Allocator t object using the given capacity. Since the
capacity must be a multiple of 16, round up to the nearest multiple
of 16, if necessary. This will call malloc once, to create the
memory space specified by the capacity. The list of Allocation t
objects will initially be empty and there shall be no mallocs associated
with it at this point. Make sure that you only allocate
memory once at this point: this may be explicitly tested. You
will also keep track of the sum of the allocations made in a size t.
(c) void freeAllocator(struct Allocator t* it): Destroys the given Allocator
t object. User is responsible for freeing and assigning to
NULL afterwards, therefore, we return nothing. This must handle
freeing memory as well as any Allocation t objects we may
have and the list that contained them.
(d) void* allocate(struct Allocator t* it, size t amt): Requests an
allocation from the allocator. The allocator will determine a region
of space within memory that satisfies the request but has
not been allocated already. Note that amt must be rounded up
to the nearest multiple of 16. Track the allocation of this space
and then return a pointer to the region of space within memory
that satisfies this request. If no such space exists, return NULL.
The memory location you return must be that with the lowest
possible address within your allocation - if you always scan
from the beginning of memory to find where to allocate, you will
do this implicitly.
You are required to use Allocation t objects to track the usage
of memory within the allocator.
(e) void deallocate(struct Allocator t* it, void* ptr): Deallocates
the given allocation. If we are given NULL, ignore the request.
Otherwise, search through our list of allocations and remove the
matching allocation. If there is no matching allocation, print an
error to standard error (a bunch of garbage with numbers would
3be appropriate and funny but not necessary, ”Corruption in free”
is sufficient.) and call exit(1) to terminate the program. When
the user tries to deallocate something that we didn’t allocate for
them, we punish them severely.
(f) void* getBase(struct Allocator t* it): Returns a pointer to the
allocator’s memory. You won’t use this for anything in particular
but the tester expects it.
(g) size t getUsed(struct Allocator t* it): Returns the amount of
space used by the allocations in the allocator.
(h) size t getCapacity(struct Allocator t* it): Returns the capacity
of the allocator.
(i) void printAllocations(struct Allocator t* it, FILE* fd): This is
given to you, precompiled. This prints all of the allocations made
by the allocator in a ”nice” format to the FILE* specified by fd.
This requires the following two functions (getAllocation, numAllocations)
which would be private if that was allowable in C.
(j) struct Allocation t* getAllocation(struct Allocator t* it, size t
index): Returns the allocation specified by index. Returns a
NULL if out of bounds.
(k) size t numAllocations(struct Allocator t* it): Returns the number
of allocations that are currently tracked by the allocator.
(l) void* riskyAlloc(struct Allocator t*, size t size): Same as allocate
except in the case that we don’t have enough memory available,
use realloc to get more memory. This is completely unsafe in some
cases. If the reallocation was safe, you now have a larger capacity
and need to adjust accordingly. If the reallocation was not safe,
meaning that the pointers that had been given to the user in the
past are now all invalid, print ”Bad realloc” to standard error
and then return NULL.
Checkpointing:
1. The Allocation object, in its entirety (Allocation.h and Allocation.c)
are due for the checkpoint.
2. You may call other functions, etc, as long as everything is included in
your checkpoint submission.
3. To submit your checkpoint:
4cp Allocation.h checkpoint4.c
cat Allocation.c >> checkpoint4.c
~jloew/CSE109/submitCheckpoint.pl 4
That is lowercase PL, followed by the number 4.
4. You may submit your Checkpoint up to ten times total, this includes
after the checkpoint is due as well.
5. Ideally, it will tell you which functions are incorrect. It is possible
that the functions are incorrect but pass the checkpoint. Although,
they should be mostly correct or completely correct if they pass the
checkpoint.
6. The checkpoint will not check for memory corruption or leaks. You
will need to handle that yourself.
Style:
For assignments, we follow the Allman style of braces and indentation.
1. Review the Style document on Coursesite
Testing:
1. You will need to use multiple steps to compile your code since you will
have more than one .c source file.
You can provide a Makefile if you want, it will not be used during
our testing.
module load gcc-7.1.0
gcc -Werror -Wall -g -c Allocation.c
gcc -Werror -Wall -g -c Allocator.c
gcc -Werror -Wall -g -o prog4 Allocation.o Allocator.o prog4.o
2. Your final executable will be called prog4.
3. Make sure to test cases where you run out of memory - note that when
you run out of memory, you may memory leak in that case without
penalty.
54. For your own testing you will need to link printAllocations:
module load gcc-7.1.0
gcc -Werror -Wall -g -c Allocation.c
gcc -Werror -Wall -g -c Allocator.c
gcc -Werror -Wall -g -c prog4.c
gcc -Werror -Wall -g -o prog4 Allocation.o Allocator.o printAllocations.o
prog4.o
Submission:
1. Your code must have the functionality as specified by the assignment
and you absolutely must not break encapsulation unless it is otherwise
not possible to do so. This is because we can replace your Allocator
and/or Allocation code with our own and everything should still work.
2. Once ready to submit, you can package up the assignment as a .tgz
file
tar -czvf Prog4.tgz Prog4
You must use this command in the directory that contains the
Prog4 folder, not within the directory.
3. Transfer Prog4.tgz to the Program 4 submission area of CourseSite.
Comment Block:
/*
CSE 109: Fall 2018
Program #4
*/
联系我们
QQ:99515681
邮箱:99515681@qq.com
工作时间:8:00-21:00
微信:codinghelp
热点文章
更多
辅导 comm2000 creating socia...
2026-01-08
讲解 isen1000 – introductio...
2026-01-08
讲解 cme213 radix sort讲解 c...
2026-01-08
辅导 csc370 database讲解 迭代
2026-01-08
讲解 ca2401 a list of colleg...
2026-01-08
讲解 nfe2140 midi scale play...
2026-01-08
讲解 ca2401 the universal li...
2026-01-08
辅导 engg7302 advanced compu...
2026-01-08
辅导 comp331/557 – class te...
2026-01-08
讲解 soft2412 comp9412 exam辅...
2026-01-08
讲解 scenario # 1 honesty讲解...
2026-01-08
讲解 002499 accounting infor...
2026-01-08
讲解 comp9313 2021t3 project...
2026-01-08
讲解 stat1201 analysis of sc...
2026-01-08
辅导 stat5611: statistical m...
2026-01-08
辅导 mth2010-mth2015 - multi...
2026-01-08
辅导 eeet2387 switched mode ...
2026-01-08
讲解 an online payment servi...
2026-01-08
讲解 textfilter辅导 r语言
2026-01-08
讲解 rutgers ece 434 linux o...
2026-01-08
热点标签
mktg2509
csci 2600
38170
lng302
csse3010
phas3226
77938
arch1162
engn4536/engn6536
acx5903
comp151101
phl245
cse12
comp9312
stat3016/6016
phas0038
comp2140
6qqmb312
xjco3011
rest0005
ematm0051
5qqmn219
lubs5062m
eee8155
cege0100
eap033
artd1109
mat246
etc3430
ecmm462
mis102
inft6800
ddes9903
comp6521
comp9517
comp3331/9331
comp4337
comp6008
comp9414
bu.231.790.81
man00150m
csb352h
math1041
eengm4100
isys1002
08
6057cem
mktg3504
mthm036
mtrx1701
mth3241
eeee3086
cmp-7038b
cmp-7000a
ints4010
econ2151
infs5710
fins5516
fin3309
fins5510
gsoe9340
math2007
math2036
soee5010
mark3088
infs3605
elec9714
comp2271
ma214
comp2211
infs3604
600426
sit254
acct3091
bbt405
msin0116
com107/com113
mark5826
sit120
comp9021
eco2101
eeen40700
cs253
ece3114
ecmm447
chns3000
math377
itd102
comp9444
comp(2041|9044)
econ0060
econ7230
mgt001371
ecs-323
cs6250
mgdi60012
mdia2012
comm221001
comm5000
ma1008
engl642
econ241
com333
math367
mis201
nbs-7041x
meek16104
econ2003
comm1190
mbas902
comp-1027
dpst1091
comp7315
eppd1033
m06
ee3025
msci231
bb113/bbs1063
fc709
comp3425
comp9417
econ42915
cb9101
math1102e
chme0017
fc307
mkt60104
5522usst
litr1-uc6201.200
ee1102
cosc2803
math39512
omp9727
int2067/int5051
bsb151
mgt253
fc021
babs2202
mis2002s
phya21
18-213
cege0012
mdia1002
math38032
mech5125
07
cisc102
mgx3110
cs240
11175
fin3020s
eco3420
ictten622
comp9727
cpt111
de114102d
mgm320h5s
bafi1019
math21112
efim20036
mn-3503
fins5568
110.807
bcpm000028
info6030
bma0092
bcpm0054
math20212
ce335
cs365
cenv6141
ftec5580
math2010
ec3450
comm1170
ecmt1010
csci-ua.0480-003
econ12-200
ib3960
ectb60h3f
cs247—assignment
tk3163
ics3u
ib3j80
comp20008
comp9334
eppd1063
acct2343
cct109
isys1055/3412
math350-real
math2014
eec180
stat141b
econ2101
msinm014/msing014/msing014b
fit2004
comp643
bu1002
cm2030
联系我们
- QQ: 99515681 微信:codinghelp
© 2024
www.7daixie.com
站长地图
程序辅导网!