You're Welcome. Pleasure to be of assistance. -- RBDavidson
On Dec 17, 10:39 pm, "Charles A. Lopez" <[email protected]> wrote: > Thank you for the very well written explanation. I think this may help a > developer down the road who is working with limited resources. > > Kudos. > > C. > > > > On Wed, Dec 17, 2008 at 3:27 PM, rbdavidson <[email protected]> wrote: > > > Here is a link to an article with a reasonable explanation of the > > difference between stack and heap. (Reasonable = better than the one > > I will attempt to give) > > >http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory011220... > > > In "old school" simple terms, the stack was where the progam > > automatically allocated and deallocated memory for variables. You > > never directly managed the stack, The heap was where you manually > > allocated and deallocated memory as you needed it. I say "Old School" > > because managed environments make this distinction slippery and even > > somewhat incorrect. > > > For example: > > > "Dim MyVar as Integer" allocates off the stack. When MyVar goes out of > > scope the memory is immediately released and returned to the stack. > > You don't use a "New" command nor any other commands to allocate and > > deallocate memory beyond stating the type of the variable. > > > Compare that to "Dim MyInstance as SomeClass" . This declares a > > variable of a type, but does not allocate any memory for the object > > itself. Right now it is, literally, Nothing and cannot be used in any > > meaningful way. > > > When you assign a value to the MyInstance variable (MyInstance = New > > SomeClass) you are actually allocating a bliock of memory off the > > heap and assigning to MyInstance a pointer to that memory. (No, > > methods and properties are not duplicated for each instance of the > > classe. They are kept in a seperate block of memory shared by all > > instances of the same class. Yes this requires complicated magic to > > be performed at run-time.) > > > When the MyInstance variable goes out of scope, the memory is still > > allocated. In a non-mananged environment (C, C++, VB6, etc...) you > > would be responsible for deallocating the memory and returning it to > > the heap. If you don't, it stays in memory for the life of the > > program. (Memory leaks, Ah! The bad old days. I remember them well.) > > Since .Net is managed, eventually garbage collection kicks in and > > releases the memory for you. You can force memory to be released > > (call Dispose), but if you forget to, don't worry, sooner or later the > > memory will be cleaned up for you. (In this way, .Net is like either > > your mother or your wife, whichever applies.) > > > I could go on for quite a bit longer. The way memory is managed on > > the heap is quite complicated with lots of "gotchas" that made memory > > leaks VERY common in non-managed environments. .Net takes the > > majority of this headache off the programmer's shoulders, making the > > distinction between stack and heap less important than it once was. > > > Hope this helps. > > > -- RBDavidson > > > > Can you refresh my memory and explain the difference between the stack > > and > > > heap? > > > > > Also classes have some code overhead that structs don't which results > > > > in a struct instantiating faster than a class. Not a big deal, unless > > > > you are doing something like > > > > > Dim myStruct(100000000) as SomeStruct > > > > > Vrs > > > > > dim myClass(100000000) as SomeClass > > > > > In which case every millisecond counts and structs have the > > > > advantage. Of course, since structs are value types you can't create > > > > a new struct by inheriting from an existing one. I.e. You can't > > > > create an extensible "struct hierarchy" like you can with classes. > > > > This limits their usefulness to pretty particular cases. > > > > > - RBDavidson > > > > > On Dec 15, 3:18 pm, "Brandon Betances" <[email protected]> wrote: > > > > > Also, the only difference between a struct and a class is that a > > struct > > > > is > > > > > used for value types, not datatypes, System.Int32 for example is a > > > > struct, > > > > > string is a class. > > > > > > On Mon, Dec 15, 2008 at 4:11 PM, Brandon Betances < > > [email protected] > > > > >wrote: > > > > > > > C# performs garbage collection automatically, but you can call it > > > > > > expilictly with the System.GC.Collect() method. > > > > > > put it where the delete statement is. > > > > > > > On Mon, Dec 15, 2008 at 3:18 PM, Alon K <[email protected]> wrote: > > > > > > >> Hi, > > > > > > >> I remember that in C++ one had to issue the following statement > > (or > > > > > >> something similar) to clean up memory: > > > > > > >> delete pNode; > > > > > > >> and the memory address assigned to pNode will be unassigned. > > > > > >> Is there something like this that needs to be done in C# ? > > > > > > >> So for example I have: > > > > > > >> pHold = pIndex; > > > > > >> pIndex = pIndex->pNext; > > > > > >> delete pHold; ????? <-- what can I do here > > > > > > >> While on the topic, I have been doing the following to create > > linked > > > > > >> lists in the intermediate step: > > > > > > >> NODE* pCreate = stackalloc NODE[1]; > > > > > >> pIndex->pNext = pCreate; > > > > > >> pIndex = pCreate; > > > > > > >> While I haven't programmed in C++ in a while I remember that this > > > > > >> could be done directly in C++: > > > > > > >> pIndex->(*pNext) = new NODE; > > > > > >> pIndex = pIndex->pNext; > > > > > > >> Also the code above using stackalloc NODE[1] just feels wrong and > > as > > > > > >> if I'm using it to do something it wasn't intended to do. Now for > > the > > > > > >> application it is important to keep the spirit of a linked list > > and > > > > > >> not an stacked list, meaning I want to be able to move the links > > > > > >> around dynamically. > > > > > > >> How can I do this correctly, I may not be understanding the > > > > > >> fundamentals of C# (such as how variables are treated). Also NODE > > is a > > > > > >> struct, which is different from a Class in C# in terms of data > > from my > > > > > >> understanding. > > > > > > >> Appreciate your help. > > > > > > >> -Alon- Hide quoted text - > > > > > > - Show quoted text - > > > > -- > > > Charles A. Lopez > > > [email protected] > > > > Bachelor of Arts - Computer Science > > > New York University > > > > Registered Microsoft Partner > > > > New York City, NY- Hide quoted text - > > > > - Show quoted text -- Hide quoted text - > > - Show quoted text -
