Jump to content

scope variable local global


Recommended Posts

Beyond the definition of scope, a global variable remains in your memory space until it is explicitly released. The memory space consumed by local variables is released by the garbage collector when it cycles after your function has executed. That is the main purpose of separate declarations.

Having a lot of Global declarations will impact your memory consumption. A variable is essentially a pointer to a memory address, the amount of memory it takes to store the address space of a variable is determined by the size of the address and your descriptor table. If you were to explicitly flag each variable for a scope resolution it would take even more memory.

Lets consider how the GC handles variables for each scope, Local variables are flagged for garbage collection once the function has completed execution, and Global variables are held until they are explicitly released or the application has terminated. In compiler theory you have lexers, parsers, interpreters, and compilers. The lexer defines specific tokens within the language such as Func, Local, Dim, Global, etc... The parser then takes the tokens generated by the lexer to pass it on to the interpreter or compiler. If the purpose of a Local variable is to be released upon execution of the function, Local variables cannot sensibly exist in the Global scope (outside of a function) because it cannot determine when it can safely be released. The parser is then smart enough to pick up on the fact that a Local or Dim token is outside of Func and EndFunc tokens and converts it to Global to eliminate overhead on the GC and memory tables.

This is all educated speculation of course.

Edited by slbmeh
Link to comment
Share on other sites

I don't see the point of declaring a variable as "Local" unless you have MustDeclareVars set to 1. Just leave it out when assigning a variable and it already is a local variable (with exception to the main script body) and then use Global when needed. Even if passing a local variable (inside a function) to another function as a parameter I don't think you have to decare it as a local variable.

Link to comment
Share on other sites

I don't see the point of declaring a variable as "Local" unless you have MustDeclareVars set to 1. Just leave it out when assigning a variable and it already is a local variable (with exception to the main script body) and then use Global when needed. Even if passing a local variable (inside a function) to another function as a parameter I don't think you have to decare it as a local variable.

Let's hope others don't adopt your approach.

UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to comment
Share on other sites

I don't see the point of declaring a variable as "Local" unless you have MustDeclareVars set to 1. Just leave it out when assigning a variable and it already is a local variable (with exception to the main script body) and then use Global when needed. Even if passing a local variable (inside a function) to another function as a parameter I don't think you have to decare it as a local variable.

Unless of course you're using it in a function that might be used somewhere other than the original script. Then you've just added a whole new level of debugging problems because you just reused a Global variable name in your new script, in your old function that you failed to declare as Local inside your function.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to comment
Share on other sites

Unless of course you're using it in a function that might be used somewhere other than the original script. Then you've just added a whole new level of debugging problems because you just reused a Global variable name in your new script, in your old function that you failed to declare as Local inside your function.

Now that is a good example of when to declare a variable as local. If a variable name is going to be reused in another script and the answer to the question below is no. The post I made above was in regards to a single stand alone script such as the OP's.

So if I reuse a Global variable name in a separate script, the new script will not have a new memory allocation to reference if both scripts are running simultaneously?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...