You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌入式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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 04:50:47