Thanks for the suggestions. I have looked at the memory usage and it increases when saving to disk using the write to I16 file.vi (after the conversion from I32 to I16). In trying to remedy this I have tried deallocating memory, this frees up a few MB but no more than that. And although this blowup is anoying and reducing it would be helpfull (esspecially since we plan to use even bigger arrays), the main problem I have is that I can no longer allocate memery in my dll once Labview has passed the 1GB limit (even if it deallocates this memory after some time). Any suggestions here?
You are running into a fundamental problem. LabVIEW allocates single arrays as contiguous memory. If your memory is fragmented, and most memory is, you will be unable to use a single array with more data than the largest open memory block in your RAM. With LabVIEW 7.1, this is a shade over 1GByte. Throw in the fact that Windows uses most of the high 512MBytes of the virtual 2GByte limit for system DLLs, and your practical limit, even if you could use everything, is closer to 1.5GBytes.
That said, however, your problem is still solveable. First, read the tutorial Managing Large Data Sets in LabVIEW. The information you need to solve your problem should be there, with code examples. I have successfully handled gigabytes of data using LabVIEW. It is not trivial, but it is possible.
For your particular application, you should probably try things in the following order.
Good Luck! If you have any more problems or need some more tips, let us know.
...(after the conversion from I32 to I16)...
So, if you only need I16 data, why do you even have it in memory as I32?? Maybe the I32->I16 allocates extra memory, pushing you over the limit? Have you tried to write I32 binary file instead, avoiding the conversion?
Use only low-level file IO. You don't need the fancy options of the binary file VIs (open checking, choice between 1D and 2D arrays, etc).
Since your memory is OK until you write the data to disk, this alone might solve it.
This option edits the image to indicate that the application can handle addresses larger than 2 gigabytes.