1

While competing on a competitive coding websites, I formulated a solution which implemented Tries. For which I had to dynamically allocate heap memory during run-time. The solution couldn't get accepted as it crossed the time limit of 1 sec by 0.12 seconds. In the solution code, they did not allocate any heap memory and used arrays instead to build Tries. The run-time of this code was ~0.79 seconds. What can be the reason ?

TemplateRex
  • 65,583
  • 16
  • 147
  • 283
markroxor
  • 4,217
  • 2
  • 26
  • 38
  • Yes. It increases runtime, as it is a system call. – Nawaz Sep 22 '15 at 05:58
  • 3
    Like hundred million thing, can you show us some equivalent code? – Melkon Sep 22 '15 at 05:58
  • 1
    A general suggestion: when it's about performance there are tools called profilers which will tell you quite precisely where the problem could be and sometimes the results are a lot different from what you expect and another even more general suggestion: do not guess when you can have solid empirical answers quite easily. – Marco Sep 22 '15 at 08:22
  • You're not really understanding C++ if you think "allocate heap memory" and "use arrays" are mutually exclusive. `new int[5]` allocates an array on the heap. – MSalters Sep 22 '15 at 08:26
  • @MSalters please take a look at [link](http://stackoverflow.com/questions/161053/which-is-faster-stack-allocation-or-heap-allocation) .It states that stack allocation is much faster. – markroxor Sep 22 '15 at 11:15
  • @markroxor: I posted an answer there, I know the question. it's irrelevant. "heap" and "stack" are generally considered mutually exclusive, but "use arrays" is entire unrelated to the "heap vs stack" discussion. – MSalters Sep 22 '15 at 11:28

1 Answers1

3

Yes it is likely the heap allocation added overhead - it could also be your algorithm.

See eg. Which is faster: Stack allocation or Heap allocation, for some hints of the costs of heap allocation.

You could typically reduce the overheads by allocating a pool of objects at once (and releasing to the pool instead of delete) instead of frequent malloc/new. This is one technique among many. See eg. https://msdn.microsoft.com/en-us/library/ms810466.aspx for some others.

Community
  • 1
  • 1
ubi
  • 3,021
  • 1
  • 23
  • 41