HI expert:
最近一直在看ARMv8架构的spec,在网上下载了一个的编译器,请问在具体使用ARMv8时和之前在ARMv7上关于各种数据类型所占的字节数有区别吗?比如,int, long, long long, pointer等数据类型的大小.
麻烦解答一下,谢谢!然后能够推荐一款编译器用于Cortex-A53开发?
不同编译器、不同的架构会存在不同,这个不能依赖编译器,正是为了解决题主担心的问题,ANSI-C才引入了stdint.h
所以,以后不要用编译器自己的类型,应该用 stdint.h里面定义的类型,来增强代码的可移植性。
常见的数据类型有:
uint8_t int8_t
uint16_t int16_t
uint32_t int32_t
uint64_t int64_t
...
另外bool是在stdbool.h里面定义的。
通常我们在代码里面会这么写:
#include <stdint.h>
#include <stdbool.h>
谢谢!
之前在ARMv7中的编译器使用的是ILP32,即int型是32位的,long型和指针都是32-bit.
我的意思是在ARMv8架构的A64模式下我的这些数据类型是多少字节的?
AArch64模式下CPU的通用寄存器是64bit,但A64指令同时支持对64bit, 32bit, 16bit, 8bit数据类型的读写操作。linux下一般用LP64。
TYPE LP32 ILP32 LP64 ILP64 LLP64
CHAR 8 8 8 8 8
SHORT 16 16 16 16 16
INT 16 32 32 64 32
LONG 32 32 64 64 32
LONG LONG 64 64 64 64 64
POINTER 32 32 64 64 64