最近我试图调整别人的mmap代码,但遇到了以下错误。(现在我对他们的代码有点怀疑,因为它看起来像是在做一些不必要的事情——试图使用自己的页面对齐内存和MAP_FIXED。manpage建议在Linux上将addr参数传入NULL应该可以实现这个功能。)所以我认为我至少会尝试用NULL地址调用mmap。然而,当我改变它时,我并不完全理解gcc抛出的错误。他们的代码可以正常工作,而我却得到了“需要左值作为赋值的左操作数”的错误提示。
基本上,他们正在做以下事情:
基本上,他们正在做以下事情:
uint8_t * ptr = (uint8_t *)mem;
if ((uint32_t)ptr % PAGE_SIZE)
{
ptr += PAGE_SIZE - ((uint32_t)ptr % PAGE_SIZE);
}
这里的mem是指一个void*类型的内存,该内存通过malloc函数分配。
我正在尝试使用类型转换来完成类似的操作:
if ((uint32_t)mem % PAGE_SIZE)
{
(uint8_t *)mem += PAGE_SIZE - ((uint32_t)mem % PAGE_SIZE); /* ERROR */
}
所以我认为我很聪明地删除了一个我认为不需要的变量。 有人能告诉我为什么我的类型转换出错了吗? 谢谢。
malloc
获得的内存进行mmap
(使用MAP_FIXED
)可能是一个错误。 - R.. GitHub STOP HELPING ICE