嵌入式C++:QEMU树莓派环境下size_t输出与教材不符问题
问题:QEMU模拟32位树莓派时,size_t与指针大小和教材输出不符的原因
环境信息
- 本地主机:2021款M1芯片MacBook Pro
- Docker构建系统环境:
# uname -a Linux 271704cbe019 5.15.49-linuxkit #1 SMP PREEMPT Tue Sep 13 07:51:32 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux - QEMU模拟的树莓派目标系统:
# uname -a Linux raspberrypi 4.14.79+ #1 Tue Nov 26 01:41:58 CET 2019 armv6l GNU/Linux
测试场景与代码
我正在学习2020年版《Embedded Programming with C++ Cookbook》第3章(主题为使用size_t实现架构无关的数据类型大小表示),按照教材要求运行以下代码:
#include <iostream> void StoreData(const char* buffer, size_t size) { std::cout << "Store " << size << " bytes of data" << std::endl; } int main() { char data[] = "Hello, \x1b\a\x03world!"; const char *buffer = data; std::cout << "Size of buffer pointer is " << sizeof(buffer) << std::endl; std::cout << "Size of int is " << sizeof(int) << std::endl; std::cout << "Size of size_t is " << sizeof(size_t) << std::endl; StoreData(data, sizeof(data)); return 0; }
我已在Docker构建系统中针对目标架构编译代码,再通过SSH将可执行文件复制到QEMU模拟的目标系统运行。
预期与实际输出
教材给出的32位树莓派预期输出
Size of buffer pointer is 8 Size of int is 4 Size of size_t is 8 Store 16 bytes of data
我的实际运行输出
Size of buffer pointer is 4 Size of int is 4 Size of size_t is 4 Store 17 bytes of data
疑问
为何在Docker+QEMU的模拟环境下,输出会与教材不一致?这不符合虚拟化环境一致性的预期。
内容的提问来源于stack exchange,提问作者Nicholas Porter
相关产品推荐
相关产品推荐

