c++ - arm aarch64 sizeof打包结构与32位不同
问题描述
我有一些代码
#pragma pack(1)
typedef struct Data
{
unsigned int a;
unsigned int b;
unsigned int c;
char d[16];
unsigned int f;
}Data;
void f()
{
Data a;
memset(&a, 0, sizeof(a));
a.f =12;
}
当我使用 aarch64_eabi_gcc aarch64-linux-gnu-g++ 工具链编译上述代码并 objdump 目标代码时,我得到以下结果:
……
move x2, #0x24
mov w1, #0x0
bl 0<memset>
这意味着数据的大小是 36 位长而不是 32 位长,为什么?我的 CPU 是 arm cortexa53
解决方案
推荐阅读
- c++ - 我需要用 nullptr 初始化吗?
- ruby - 如何在 Ruby 的模块中定义类级宏?
- scala - FS2:如何从 fs2.Stream 获取 java.io.InputStream?
- python - 将变量从 Python Flask 发送到 HTML
- xml - 网格视图错位删除网格视图与其他元素之间的空间
- r - 重新构造 dist.Multivariate.Normal rmvn(n,mu,V) 函数
- spring-boot - Spring 不会在 JAX-RS 定义的子资源中注入依赖项
- microsoft-graph-api - 我们如何以编程方式生成 MS Teams 代码
- php - 在 PHP 中每隔几秒更改一次文本
- jquery - 根据评论后jquery反向添加列表