Results 1 to 6 of 6

Thread: Do you know: STATIC variables

  1. #1
    thinBasic author ErosOlmi's Avatar
    Join Date
    Sep 2004
    Location
    Milan - Italy
    Age
    57
    Posts
    8,818
    Rep Power
    10

    Do you know: STATIC variables

    The STATIC statement is usually present inside a Sub or Function and is used to define variables that retain their values even after the Sub or Function ends.
    A static variable is local to its Sub or Function, and can have the same name as other variables in other parts of the script without conflict.

    [code=thinbasic]
    STATIC variable[()] [, variable[()]] [, ...] AS type [= anyValue]
    [/code]

    So, the main characteristic of STATIC variables is that they retain their values as long as the script is running. But if they retain their value it means they are just allocated once even if the function in which they are defined is executed more than once. In few words it means that STATIC ... statement is executed by thinBasic only the very first time it is encountered. In all other cases it is just ignored.

    Ok, I've got it. So?
    The little detail that STATIC ... is executed only the very first time it is encountered have great impact on script execution. One of the more resource demanding into a process is memory allocation/deallocation. Now think a function having just one local variable defined inside it but executed 1 million times:

    [code=thinbasic]
    FUNCTION MyFunction() AS LONG
    LOCAL MyVar AS LONG
    '---Do something with MyVar than return its value
    MyVar = 123 + 456
    FUNCTION = MyVAr
    END FUNCTION
    [/code]

    Think for a second to call MyFunction 1 million times. What will happen is that 1 million times MyVar will be created into a local stack and again 1 million times MyVar will be deallocated from the local stack when function ends.

    Now, rewrite the same function chaging just LOCAL to STATIC:
    [code=thinbasic]
    FUNCTION MyFunction() AS LONG
    STATIC MyVar AS LONG
    '---Do something with MyVar than return its value
    MyVar = 123 + 456
    FUNCTION = MyVAr
    END FUNCTION
    [/code]

    What will happen if we call MyFunction 1 million times but now having the same variable defined with STATIC statement?
    MyVar will be allocated just once and never deallocated till the script ends its execution. This have great great impact on the execution speed.

    Just for fun, try to execute the above 2 versions of MyFunction in a 1 million loop and see the difference. Let me know about it.

    When STATIC variables can be a boomerang?
    All possible problems about STATIC variables are related to the fact that they retain their values. So:
    • in recursive functions STATIC variables will retain their values. During recursion this can be a problem if you are not aware of it
    • in case of strings, arrays or complex structures, if big amount of data is allocated into a STATIC variable, it will remain allocated for the duration of the script or till less data will be assigned again to the same STATIC variable.


    www.thinbasic.com | www.thinbasic.com/community/ | help.thinbasic.com
    Windows 10 Pro for Workstations 64bit - 32 GB - Intel(R) Xeon(R) W-10855M CPU @ 2.80GHz - NVIDIA Quadro RTX 3000

  2. #2
    Super Moderator Petr Schreiber's Avatar
    Join Date
    Aug 2005
    Location
    Brno - Czech Republic
    Posts
    7,155
    Rep Power
    736

    Re: Do you know: STATIC variables

    Hi Eros,

    I never thought about statics this way, they really bring significant speed gain.
    On my PC the static powered function executed 1.9x faster than local variable based one.


    Petr
    Learn 3D graphics with ThinBASIC, learn TBGL!
    Windows 10 64bit - Intel Core i5-3350P @ 3.1GHz - 16 GB RAM - NVIDIA GeForce GTX 1050 Ti 4GB

  3. #3
    thinBasic author ErosOlmi's Avatar
    Join Date
    Sep 2004
    Location
    Milan - Italy
    Age
    57
    Posts
    8,818
    Rep Power
    10

    Re: Do you know: STATIC variables

    Execution speed difference can be little or big depending on your hardware config.
    In all cases where processor goes out and have to talk with memory or other hardware parts we cannot predict.

    For example on my PC a function that takes 9.8 secs to execute with LOCALs went down to 3.8 with STATICs without changing anything else. The more LOCAL can be used as STATIC the better it is.

    This let me also think that we can improve a lot general thinBasic execution speed. I have already some ideas about how to achieve better performances but it will mean rewrite a good part of Core engine. Not worth to do it now but in future releases and not before we will finish support for Win9x system.

    Ciao
    Eros
    www.thinbasic.com | www.thinbasic.com/community/ | help.thinbasic.com
    Windows 10 Pro for Workstations 64bit - 32 GB - Intel(R) Xeon(R) W-10855M CPU @ 2.80GHz - NVIDIA Quadro RTX 3000

  4. #4
    thinBasic author ErosOlmi's Avatar
    Join Date
    Sep 2004
    Location
    Milan - Italy
    Age
    57
    Posts
    8,818
    Rep Power
    10

    Re: Do you know: STATIC variables

    Quote Originally Posted by Psch
    I never thought about statics this way, they really bring significant speed gain.
    One of the reasons why I opened this new "Do you know ..." forum is to give little snapshots about little but important specific aspects that get lost in the big amount of thinBasic possibilities. Once this forum will have significant number of "Do you know ..." posts, I will use them as a sort of thinBasic advertising area when someone ask about thinBasic in other programming forums.

    Ciao
    Eros
    www.thinbasic.com | www.thinbasic.com/community/ | help.thinbasic.com
    Windows 10 Pro for Workstations 64bit - 32 GB - Intel(R) Xeon(R) W-10855M CPU @ 2.80GHz - NVIDIA Quadro RTX 3000

  5. #5
    Junior Member
    Join Date
    Jul 2008
    Posts
    13
    Rep Power
    18

    Re: Do you know: STATIC variables

    Thank you.

    This is just the kind of feedback that is extremely helpful for beginners in thinBacis like me. I know the problems with allocating and freeing memory in older languages, but it is so easy to miss with modern system.

    /Kent

  6. #6
    thinBasic author ErosOlmi's Avatar
    Join Date
    Sep 2004
    Location
    Milan - Italy
    Age
    57
    Posts
    8,818
    Rep Power
    10

    Re: Do you know: STATIC variables

    Thanks Kent.

    It is pleasure to see those posts can help.
    www.thinbasic.com | www.thinbasic.com/community/ | help.thinbasic.com
    Windows 10 Pro for Workstations 64bit - 32 GB - Intel(R) Xeon(R) W-10855M CPU @ 2.80GHz - NVIDIA Quadro RTX 3000

Similar Threads

  1. STATIC variables
    By ErosOlmi in forum Suggestions/Ideas discussions
    Replies: 16
    Last Post: 26-03-2008, 22:00

Members who have read this thread: 0

There are no members to list at the moment.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •