ARM64系统中不同大小的指针投射警告

问题描述

我运行的是基于 Xilinx 的裸机 ARM A57 系统。

我想把两个链接器定义的符号的地址带到我的 c 程序中...

这是链接器脚本:

.mutex_ram: {
     _mutex_start = .;
     . += _MUTEX_SIZE;
     . = ALIGN(8);
     _mutex_end = .;
} > mem_common

这是我想用 C 做的事情的简要总结。

extern int _mutex_start;
extern int _mutex_end;
void some_fcn(void) 
{
    int size = (int)(&_mutex_end)-(int)(&_mutex_start);
    memset(&_mutex_start,size);
}

为什么编译器会警告我这是一个不同大小的整数转换?我就是不明白...

warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]

有人可以帮我吗?

解决方法

感谢 Jabberwocky,我使用了

ptrdiff_t size = (ptrdiff_t)((intptr_t)&_mutex_end -  (intptr_t)&_mutex_start);

我不知道使用 ptr_diff_t 实际上是符合 MISRA 标准的...感谢您的帮助!