C99中如何合并两个栈分配数组并优化栈内存占用
合并C99栈数组的高效方案(无malloc/汇编)
纯C99标准方案
方案1:结构体封装数组(零额外内存)
若可以提前规划数组定义,将两个栈数组封装到同一个结构体中,就能利用结构体成员的连续内存布局,直接获得合并后的连续数组,无需额外内存或复制操作:
#include <stdio.h> int main() { const size_t len_a = 5; const size_t len_b = 3; // 结构体保证a和b内存连续 struct { int a[len_a]; int b[len_b]; } stacked_arr = {{1, 2, 3, 4, 5}, {6, 7, 8}}; // 指针直接覆盖两个数组的连续内存范围 int *merged = stacked_arr.a; for (size_t i = 0; i < len_a + len_b; i++) { printf("%d ", merged[i]); } return 0; }
该方案完全符合C99标准,栈内存占用仅为sizeof(a) + sizeof(b),无任何额外开销。缺点是无法直接处理已定义
相关产品推荐
相关产品推荐

