小编Ala*_*lan的帖子

mmap的指针算法

最近我试图调整某人的mmap代码并遇到以下错误.(我现在对他们的代码实际上有点怀疑,因为看起来他们正在做一些不必要的事情 - 尝试将MAP_FIXED与他们自己的页面对齐的内存一起使用.该联机帮助页建议使用NULL调用mmap,因为addr参数应该在Linux上执行此操作.)所以我想我至少会测试用NULL地址调用mmap.但是我不太明白当我改变它时gcc对我不利的错误.他们的代码工作正常,而我需要左值作为赋值的左操作数.

基本上他们正在做以下事情:

    uint8_t * ptr = (uint8_t *)mem;
    if ((uint32_t)ptr % PAGE_SIZE)
    {
        ptr += PAGE_SIZE - ((uint32_t)ptr % PAGE_SIZE);
    }
Run Code Online (Sandbox Code Playgroud)

mem是某些malloc内存的空白*.

对于类型转换,我或多或少都在尝试:

    if ((uint32_t)mem % PAGE_SIZE)
    {   
        (uint8_t *)mem += PAGE_SIZE - ((uint32_t)mem % PAGE_SIZE); /* ERROR */
    }
Run Code Online (Sandbox Code Playgroud)

所以我认为我很聪明并且删除了一个我脑海中不需要的变量.有人可以告诉我为什么我的类型转换关闭?干杯.

c pointers casting mmap

7
推荐指数
1
解决办法
878
查看次数

标签 统计

c ×1

casting ×1

mmap ×1

pointers ×1