【发布时间】:2021-04-29 02:33:27
【问题描述】:
我的机器是ubuntu 20.04
我有一个任务说 “使用系统调用(mmap 和 munmap)实现您自己的动态内存分配函数:mymalloc 和 myfree,它们具有与 malloc 相同的功能,并且从标准 C 库中免费。将实现保存在文件 mymalloc.h 和 mymalloc.c 中。”
然后它说 “我们必须至少分配所需的长度 + 用于存储的变量的大小 长度(size_t)。我们将长度存储为第一个元素,然后返回下一个元素。”
这是我的代码(大小是 size_t 类型的参数)
size_t total_size = size + sizeof(size_t);
size_t allocation_overflow = total_size % page_size;
if(allocation_overflow > 0)
total_size += page_size - allocation_overflow;
void *data = mmap(NULL ,total_size, PROT_EXEC | PROT_READ | PROT_WRITE , MAP_PRIVATE , 0 , 0);
// size_ptr will point to stored size
size_t *size_ptr =(size_t *)data;
size_ptr[0] = total_size;
// pointer to allocated memory
void* allocated_mem_pointer = data + sizeof(size_t);
它给出警告“指针类型'void *'用于算术[-Wpointer arith]”
我必须将长度存储在第一个元素中,因为赋值说明了它,但我不警告我想编写干净的代码。 İS 有它的合法性。我已经读过Pointer arithmetic when void has unknown size 但找不到任何答案来解决它。
【问题讨论】:
-
您可以将
data设为指向char(char*) 的指针。您正在递增从sizeof返回的数字,sizeof(char)保证为 1,因此无论如何您基本上都是在递增sizeof(char)的倍数。