qt-interest@trolltech.com
[Top] [All Lists]

Re: Fwd: Stack vs. Heap

Subject: Re: Fwd: Stack vs. Heap
From: Dave Smith
Date: Sat, 11 Aug 2007 21:35:04 -0600
Daniel Albuschat wrote:
that Qt docs and Qt examples, etc. seem to emphasize on heap-allocation
in situations where it absolutely is not needed (nor desireable)

Just an interesting semi-counter-example: Just about every Qt example program I've seen starts by allocating a widget on the stack in main().

A pedantic side note regarding semantics: Class member variables declared as non-pointers are often referred to as "stack allocated" even though they are really allocated wherever their owning class is allocated. I will follow this semi-misused phraseology in the paragraphs to follow.

My experience has been that while allocating non-pointer QObjects on the stack works, it is often better to use the heap, simply so you can control *when* the allocation (and subsequent constructor calls) happen. It may be faster to perform the allocation on the stack (pointer increment instead of memory management), but bare in mind that allocating a C++ object implies calling its constructor too, which always takes some time, whether on the heap or stack.

For example, if I create a QWidget-derived MyWidget class, which has instances of FooWidget, BarWidget, and BizWidget as member variables, I don't necessarily want my FooWidget, BarWidget, and BizWidget objects to be instantiated every time MyWidget is instantiated, because I don't want MyWidget to take that long to instantiate. I therefore choose to defer instantiation until they are needed, thus improving the instantiation time of MyWidget. If MyWidget is instantiated at application startup time, then the application will start more quickly, which is a Good Thing.

There's nothing worse than waiting for a GUI application to startup simply because the author chose to naively instantiate every single widget application-wide, even if they are not used during the life of the application (i.e., dialogs). This is what can happen if you choose to use non-pointer member variable QObject instances, because your code forces the instantiation of each member to happen at the time the "parent" object is instantiated.

I also agree with the previous poster that dynamic memory allocation is very rarely the source of performance bottlenecks in semi-modern desktop systems.

My $0.02.

--Dave

--
To unsubscribe - send a mail to qt-interest-request@xxxxxxxxxxxxx with 
"unsubscribe" in the subject or the body.
List archive and information: http://lists.trolltech.com/qt-interest/

<Prev in Thread] Current Thread [Next in Thread>