From: Don A. <dam...@ni...> - 2005-03-16 21:32:37
|
In the process of testing our existing applications on Aubit (both 0.49.51 and 0.49.68), I have discovered what appears to be a memory allocation issue with one of our programs. I have trimmed out all of the excess code to create a simplified standalone application that duplicates the problem. This program will use all available system memory (including swap) before it finally stops. As soon as the program stops, all memory is released. I'm doing my testing on White Box Enterprise Linux (equivalent to RHEL 3.0) using Informix Client SDK 2.81UC1, with A4GL_LEXTYPE set to EC. I was able to track the problem down to the "let xstr_field = " line. If I comment it out, the program does not use excessive memory. On my test box, I'm seeing about 60MB of additional memory allocated for every 1000 times through the main loop. Based on the math, it seems like every time the let statement is performed, another 2000 bytes is allocated. On the bright side, I've got 931 other executables that seem to be working wonderfully, based on the testing I have performed so far! That brings me to an unrelated question. Our executables are currently compiled with I4GL 7.20 on SCO Unix. They range in size from around 1MB to 4MB. The same executables compiled on my test system range from 10KB to 10MB. Any idea why there would be such a large difference in file sizes? Our applications typically consist of a single .4gl file with a large library of functions that is linked in during compilation. I'm not really concerned, since the overall size of everything balances out, but I am curious. I look forward to any and all responses. In the meantime, I'll go back to playing, oops, I mean testing. main define counter integer define i integer define reclength integer define xdata char(2000) define xstr_field char(2000) let xdata = "ABCDE|FGHIJ|JLMNO|PQRST|UVWXYZ" let reclength = length(xdata) for counter = 1 to 20000 if not counter mod 1000 then error "Count: ", counter sleep 1 end if initialize xstr_field to null for i = 1 to reclength let xstr_field = xstr_field[1,i], xdata[i] end for end for end main |