我需要为GPU编程编写一个自定义malloc。这将正确工作吗?
void* malloc(int size, int* bytesUsed, uchar* memory){
int startIdx = (*bytesUsed);
(*bytesUsed) += size;
return (void*)(memory+startIdx);
}
字符串
我是C编程新手,我可能犯了与指针算术相关的错误或其他错误...这个想法是bytesUsed
给你第一个空闲地址的memory
的索引,所以你将它递增size
,然后将递增的索引作为指针返回。
2条答案
按热度按时间3phpmpom1#
我不确定这个简单的基于堆栈的解决方案是否适合您
字符串
我没有提供
free
,因为你说你不需要释放。jqjz2hbq2#
[Edit 2023]
sizeof(max_align_t)
更正为alignof(max_align_t)
。存在一些问题:
1.最大的问题是对齐。返回的指针需要对齐。因为这个
malloc()
没有给出所需的指针类型,所以使用max_align_t
“这是一个对象类型,其对齐程度与所有上下文中的实现所支持的一样大”C11dr §7.19 2。注意:*bytesUsed
也需要这种对齐。因此,如果其他代码影响它,则应应用类似的代码。字符串
1.未检测到内存不足。
1.避免重复使用标准库名称。如果需要的话,代码可以在以后
define
它们。型
malloc()
需要不同的分配类型:size_t
,而不是int
。型
1.不需要转换。
型
1.使用
unsigned char
比使用uchar
更清楚,希望不是别的东西。把这一切放在一起
型
另外,
RG_free()
未被编码。如果需要的话,这种简单的分配方案将需要大量的补充。