Raistlin, I have no idea whether C is “smarter” than LV about allocating an array. Since LV is written in C/C++, that would seem weird. I think it is more likely that LV specifically allocates contiguous memory for performance, stability, or some other reason. However, since I do no write the internals of LV, I really don't know. Plus, I haven't developed anything in C for over 10 years, so my intimate knowledge of it is rather limited at this point.
As for breaking up the data into individual buffers, I don't think this would lead to spaghetti code if done correctly. I would think of the 2D array as an array of 1D arrays, one for each data channel. I would create a LV2 global data repository VI template to hold a single channel (see the
large data tutorial for details). I would then use a loop to create as many instances of this as I needed (448? in this case). The end result would be an array of VI references, but could be though of as an array of pointers to arrays. Extracting a single channel or portion of a channel is easy - just reference the VI and extract the section. Functions would need to be created to extract 2D sections, but those would be very straightforward, similar to what we had to do before LV6i introduced all the nice array functions. The only down side to this is the VI overhead on each array. The final size of each array would govern whether or not this would be acceptable.