资料题:经典的sizeof(struct)和sizeof(union)内存对齐
第二章、C/C++题目 · 经典的sizeof(struct)和sizeof(union)内存对齐。按原资料页码整理,并补充历史材料使用边界。
Question Bank
按知识、方向与难度筛选;每道题都有分层回答和工程追问。
第二章、C/C++题目 · 经典的sizeof(struct)和sizeof(union)内存对齐。按原资料页码整理,并补充历史材料使用边界。
静态断言在编译期验证必须恒真的条件,适合检查结构大小、字段偏移、数组容量、类型宽度和硬件配置关系。它不能替代对运行时输入的校验,也不能单独保证不同工具链拥有相同 ABI。
哈希表负责按键快速定位,双向链表维护最近使用顺序,使命中更新和淘汰尾部都可接近 O(1)。实现难点是两种结构必须原子地保持一致,并定义容量、并发、失败回滚和对象所有权。
最小堆能 O(1) 查看最近到期项,插入和删除根为 O(log n),适合动态定时器集合;线性表查找最近项为 O(n),但任务很少时实现更简单且常数更小。
位图用一个 Bit 表示一个固定编号资源,空间紧凑,集合并交和查找空闲位可借助按字运算或 CLZ/CTZ。它适合容量已知、只需占用状态的对象,不适合存储复杂元数据。
侵入式链表把节点嵌入业务对象,不需为节点单独分配内存,插入删除成本稳定,还能用 container-of 找回宿主对象。代价是对象与容器耦合、同一节点不能同时属于多个链表,生命周期必须严格受控。
SPSC 可以让生产者独占写索引、消费者独占读索引,但发布索引前必须保证数据写入已对另一执行单元可见,读取索引后也要建立相应顺序。volatile 只约束编译器访问,不能完整替代原子和屏障。