LB Booster
« LBB (initial) memory usage »

Welcome Guest. Please Login or Register.
Apr 1st, 2018, 04:33am



ATTENTION MEMBERS: Conforums will be closing it doors and discontinuing its service on April 15, 2018.
We apologize Conforums does not have any export functions to migrate data.
Ad-Free has been deactivated. Outstanding Ad-Free credits will be reimbursed to respective payment methods.

Thank you Conforums members.
Speed up Liberty BASIC programs by up to ten times!
Compile Liberty BASIC programs to compact, standalone executables!
Overcome many of Liberty BASIC's bugs and limitations!
LB Booster Resources
LB Booster documentation
LB Booster Home Page
LB Booster technical Wiki
Just BASIC forum
BBC BASIC Home Page
Liberty BASIC forum (the original)

« Previous Topic | Next Topic »
Pages: 1  Notify Send Topic Print
 thread  Author  Topic: LBB (initial) memory usage  (Read 558 times)
tsh73
Full Member
ImageImageImage


member is offline

Avatar




PM

Gender: Male
Posts: 210
xx LBB (initial) memory usage
« Thread started on: Mar 20th, 2015, 07:34am »

I wonder if I am the only person who consider that to be a problem.
Since version 2.60,
>> The amount of memory available has been increased to 500 Megabytes.
But that looks like 500 Megabytes is grabbed on each start of a program.
So, on my machine (I know it's old) with 1Gb RAM and Win XP, it works like this (looking at Process Explorer):
Just after reboot (only big program running is Outlook)
commit charge:
current 684 700
limit 2 069 828
After starting EXE compiled with LBB:
current 1 200 000
2nd exe:
1 720 000
3rd:
2 244 000
commit charge shows 99%
That's all - any other attempts ends with "No room" error
It just irks me that any small program eats up 500mb memory. With 100mb, I just did not bumped into this. What was the reason anyway? I have read that in LBB, one can use REDIM to get array of any size which memory allows.
User IP Logged

Richard Russell
Administrator
ImageImageImageImageImage


member is offline

Avatar




Homepage PM


Posts: 1348
xx Re: LBB (initial) memory usage
« Reply #1 on: Mar 20th, 2015, 09:20am »

on Mar 20th, 2015, 07:34am, tsh73 wrote:
But that looks like 500 Megabytes is grabbed on each start of a program.

No, it's 500 Mbytes of virtual memory (address space), not real memory. I've just run a small executable compiled using LBB v3.00, and Task Manager is reporting that it is using 17.6 Mbytes of memory (Windows 8.1), which I don't think is too bad.

Edit: Just compiled a program consisting of the single statement wait. Task Manager reports 1.9 Mbytes memory usage.

Quote:
What was the reason anyway?

For improved compatibility with LB4.5, which reserves 1 Gbyte of virtual memory (compared with the 70 Mbytes or so of LB 4.04).

Richard.
« Last Edit: Mar 20th, 2015, 10:08am by Richard Russell » User IP Logged

Richard Russell
Administrator
ImageImageImageImageImage


member is offline

Avatar




Homepage PM


Posts: 1348
xx Re: LBB (initial) memory usage
« Reply #2 on: Mar 20th, 2015, 10:15am »

Sixteen copies of the program running:

User Image
User IP Logged

tsh73
Full Member
ImageImageImage


member is offline

Avatar




PM

Gender: Male
Posts: 210
xx Re: LBB (initial) memory usage
« Reply #3 on: Mar 20th, 2015, 10:29am »

Ok, 16 copies - more then enough.
So I'll say it's just sign of long overdue upgrade in my part.
Please tell how much memory your machine has and what is the OS?
EDIT I see the OS - Windows 8.1
« Last Edit: Mar 20th, 2015, 10:31am by tsh73 » User IP Logged

Hans
New Member
Image


member is offline

Avatar




PM

Gender: Male
Posts: 31
xx Re: LBB (initial) memory usage
« Reply #4 on: Mar 20th, 2015, 10:29am »

It has something to do whith the way you retreive the amount of memory used. I use the code below since long in a number of LB apps. In LBB the result is always 500, but the Taskmanager gives much lower amounts, more believeble. That's why I've now included an extra if statement for LBB.
Because in LBB one has almost infinite memory, it is not high on my prioritylist but I will have to look for another way to retreive the amount of memory.

Hans

Code:
FUNCTION GetUsedMemory(byref ErrorMsg$)
'=returns the memory used by the current process
'returns -1 if an error is encountered
'the error message is stored in the submitted variable
    ErrorMsg$ = ""
    struct ProcessMemoryCounters, _
        cb                         as ulong,_
        PageFaultCount             as ulong,_
        PeakWorkingSetSize         as ulong,_
        WorkingSetSize             as ulong,_
        QuotaPeakPagedPoolUsage    as ulong,_
        QuotaPagedPoolUsage        as ulong,_
        QuotaPeakNonPagedPoolUsage as ulong,_
        QuotaNonPagedPoolUsage     as ulong,_
        PagefileUsage              as ulong,_
        PeakPagefileUsage          as ulong
    ProcessMemoryCounters.cb.struct = len(ProcessMemoryCounters.struct)
    open "psapi.dll" for dll as #psapi
    calldll #kernel32, "GetCurrentProcess",hProcess as ulong
    cb = len(ProcessMemoryCounters.struct)
    calldll #psapi, "GetProcessMemoryInfo",_
        hProcess              as ulong,_
        ProcessMemoryCounters as struct,_
        cb                    as ulong,_
        result                as long
    if result then
        GetUsedMemory = ProcessMemoryCounters.PagefileUsage.struct
    else
        call GetLastError ErrorMsg$
        GetUsedMemory = -1
    end if
    close #psapi
    UsedMemory = GetUsedMemory/1000000 'convert to MB
    if instr(version$,"LBB")<>1 then
        if UsedMemory>65 then notice "Memory nearly full: "+using("####",UsedMemory)
    end if
END FUNCTION
SUB GetLastError byref Message$
    calldll #kernel32, "GetLastError", ErrorCode as ulong
    dwFlags = _FORMAT_MESSAGE_FROM_SYSTEM
    nSize = 1024
    lpBuffer$ = space$(nSize); chr$(0)
    dwMessageID = ErrorCode
    calldll #kernel32, "FormatMessageA", _
        dwFlags      as ulong, _
        lpSource     as ulong, _
        dwMessageID  as ulong, _
        dwLanguageID as ulong, _
        lpBuffer$    as ptr, _
        nSize        as ulong, _
        Arguments    as ulong, _
        result       as ulong
    Message$ = left$(lpBuffer$, result)
END SUB
 
User IP Logged

Richard Russell
Administrator
ImageImageImageImageImage


member is offline

Avatar




Homepage PM


Posts: 1348
xx Re: LBB (initial) memory usage
« Reply #5 on: Mar 20th, 2015, 12:21pm »

on Mar 20th, 2015, 10:29am, Hans wrote:
It has something to do whith the way you retreive the amount of memory used.

The problem is that both you and Anatoly are measuring the Commit Charge, which is the amount of memory a process has said it might use.

But this reserved address space does not actually use up real memory, until you create variables, arrays, structures, strings etc. to occupy it. In other words it doesn't reduce the memory available to other processes, which run in their own private address spaces.

This article has some interesting information. In particular read the section So what is “commit?”:

http://brandonlive.com/2010/02/21/measuring-memory-usage-in-windows-7/

Specifically it warns that if you disable your page file then Windows will reserve real memory rather than virtual memory, and then LBB really will gobble up 500 Mbytes of RAM!

Richard.
User IP Logged

Pages: 1  Notify Send Topic Print
« Previous Topic | Next Topic »

| |

This forum powered for FREE by Conforums ©
Terms of Service | Privacy Policy | Conforums Support | Parental Controls