I have the follow struct in C++ on iOS, and am wondering if it is a problem, performance wise. I have been reading on cache line access and minimising them for optimal performance. I understand that on iOS, the newer chips have a cache line size of 32bytes.
I have the following struct in my app.
struct globalSynthParams
{
globalVoiceParams voiceParams;
globalOscillatorParams osc1Params;
globalOscillatorParams osc2Params;
globalOscillatorParams osc3Params;
globalOscillatorParams osc4Params;
globalOscillatorParams lfo1Params;
globalOscillatorParams lfo2Params;
globalFilterParams filter1Params;
globalFilterParams filter2Params;
globalEGParams eg1Params;
globalEGParams eg2Params;
globalEGParams eg3Params;
globalEGParams eg4Params;
globalDCAParams dcaParams;
};
When I run the sizeof() for each inner struct, it gives me:
Size of globalVoiceParams: 200
Size of globalOscillatorParams: 56
Size of globalFilterParams: 24
Size of globalEGParams: 24
Size of globalDCAParams: 8
Size of globalSynthParams: 688 (the total size of the above struct)
Is this considered bad struct planning? Would there be any tangible performance improvement if I break up the structs such that they fit within a cache line or 2? I have checked the inner structs, they are packed nicely.
Some other articles I've read.. What is "cache-friendly" code?
Many thanks for your insights.
EDIT: In relation to the above question, what exactly am I doing when I am doing the below?
m_dAmplitude = osc3Params->dAmplitude; // osc3Params is part of the above struct
Am I loading the entire globalSynthParams struct into memory and accessing the osc3Params struct from there?