Ну, тривиальный ответ - то, что местоположение структуры в памяти отличается, и таким образом данные, Вы являетесь передающими, отличаются. Более сложный ответ, я думаю, распараллеливает.
Ваш компилятор должен был бы обнаружить a) то нечто, не изменяет структуру; b) то нечто, не делает никакого вычисления на физическом местоположении элементов структуры; И c) это вызывающая сторона, или другой поток, порожденный вызывающей стороной, не изменяет структуру, прежде чем нечто будет закончено, работая.
В Вашем примере, возможно, что компилятор мог сделать эти вещи - но сохраненная память несущественна и вероятно не стоит взять предположение. Что происходит, если Вы запускаете ту же программу со структурой, которая имеет два миллиона элементов?
Apple два образца (или более), которые это делают. Проверьте aurioTouch и SpeakHere. aurioTouch может принимать входные сигналы микрофона и воспроизводить их, а SpeakHere может принимать входные данные и записывать их, и вы можете довольно легко изменить его для воспроизведения.