From: Mike A. <mik...@au...> - 2005-03-16 21:58:19
|
You can come again! Found and fixed... (At least they are in CVS, and will be in the next build - if you let me know which one you use - source, normal, oldlibc - then I'll do a rebuild for you...) On Wednesday 16 March 2005 21:30, Don Amburgey wrote: > 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 |