Developer knowledge network ยท moderated exchange

Komunitas Kode Tidak Dapat Diandalkan

Riset Pengembang, Rekayasa Terbalik & Komunitas Pengkodean

Knowledge indexHidup
4Categories
919Threads
2.8KPostingan
Discussion

Understanding Cache Locality: Array of Structures (AoS) vs Structure of Arrays (SoA) [StackOverflow Architecture Guide]

profiler_pat
Performance Hunter
MEMBER
Reputasi: 146
Tanggal Bergabung: Aug 2019
Postingan: 33
Terima kasih: 31
1 bulan yang lalu ยท Jul 24, 2026 6:43 AM
#1

Why data layout matters more than asymptotic time complexity for CPU cache performance:

  • Array of Structures (AoS): struct Particle { float x, y, z; int id; char name[32]; }; std::vector<Particle> particles;
    Iterating over positions loads 48 bytes per particle into CPU cache lines, wasting 75% bandwidth on unused name data!
  • Structure of Arrays (SoA): struct ParticleSystem { std::vector<float> posX, posY, posZ; std::vector<int> id; };
    Positions are contiguous in RAM. CPU prefetcher loads 16 consecutive float coordinates per 64-byte cache line, enabling SIMD vectorization and 3.8x faster execution!
simd_vector_ace
SIMD & Intrinsics
MEMBER
Reputasi: 151
Tanggal Bergabung: May 2020
Postingan: 8
Terima kasih: 36
1 bulan yang lalu ยท Jul 24, 2026 12:54 PM
#2

SoA layout is the foundational principle behind Data-Oriented Design (DOD) and Entity Component Systems (ECS).

assembly_micro_dev
x86_64 Micro-arch
MEMBER
Reputasi: 186
Tanggal Bergabung: Oct 2021
Postingan: 10
Terima kasih: 27
1 bulan yang lalu ยท Jul 25, 2026 3:21 AM
#3

Cache misses cost 100-300 CPU cycles each. Keeping hot data packed tightly in memory is how you write real-time software.