views:

795

answers:

9

I am trying to find the official (or a good enough) reason that the free store is commonly referred to as the heap.

Except for the fact that it grows from the end of the data segment, I can't really think of a good reason, especially since it has very little to do with the heap data structure.

Note: Quite a few people mentioned that it's just a whole bunch of things that are kind of unorganized. But to me the term heap physically means a bunch of things that are physically dependent on one another. You pull one out from underneath, everything else collapses on it, etc. In other words, to me heap sounds loosely organized (e.g., latest things are on top). This is not exactly how a heap actually works on most computers, though if you put stuff towards the beginning of the heap and then grew it I guess it could work.

+3  A: 

It's unordered. A "heap" of storage.

It isn't an ordered heap data structure.

S.Lott
Probably as opposed to the ordered stack.
Michael
I like to think of it as an unordered pile of <whatever>, aka a "heap," like you pointed out.
Cory Larson
But see, when I think of a physical heap of crap (like my desk), I don't see random memory, I see something that has a structure since every item lies on top of other items...
Uri
You aren't deleting from the middle of the things on your desk and freeing up gaps are you? Is the pile if crap on your desk actually a stack -- last on first off? Heap memory allocation creates gaps in the middle from deletes.
S.Lott
+10  A: 

I suspect it's simply because there's no real structure to it. By that, I mean that you're not guaranteed to get the best-fit block or the next block in memory, rather you'll take what you're given depending on the whims of the allocation strategy.

Like most names, it was probably thought of by some coder (in this case, I'd guess Dennis Ritchie, Ken Thompson or Brian Kernighan, so not really just some coder) who just needed a name.

I've often heard of it referred to as an arena sometimes (an error message from many moons ago saying that the "memory arena was corrupted"). This brings up images of chunks of memory doing battle in gladiatorial style inside your address space (a la Tron).

Bottom line, it's just a name for an area of memory, you could just as well call it the brk-pool or sbrk-pool (after the calls to modify it) or any of a dozen other names.

I remember when we were putting together comms protocol stacks even before the OSI 7-layer model was a twinkle in someone's eye, we used a layered approach and had to come up with names at each layer for the blocks.

We used blocks, segments, chunks, sections and various other names, all which simply indicated a fixed length thing. It may be that heap had a similar origin:

"Hey, Bob, what's a good name for a data structure that just doles out random bits of memory from a big area?"

"How about 'steaming pile'?"

"Thanks, Bob, I'll just opt for 'heap', if that's okay with you. By the way, how are things going with the divorce?"

paxdiablo
What do you mean by DRK/BWK-class?
hasen j
Typo, was meant to be DMR/BWK for Ritchie and Kernighan (and I've now remembered that Ken Thompson had a big part as well, so I added him in - massive apologies for that, KT).
paxdiablo
They invented UNIX and C, by the way, just in case the names don't immediately register with anyone.
paxdiablo
+18  A: 

Knuth rejects the term "heap" used as a synonym for the free memory store.

Several authors began about 1975 to call the pool of available memory a "heap." But in the present series of books, we will use that word only in its more traditional sense related to priority queues. (Fundamental Algorithms, 3rd ed., p. 435)

Bill the Lizard
+1 for the only answer with any historical context.
Mark Ransom
Bah, Knuth. What would he know about data structures? :-) That's his decision of course but he's well in the minority, despite his fame.
paxdiablo
@Pax: Yes, "heap" definitely caught on, despite Knuth's effort. That seems to have something to do with its use in the C memory model, which would have been gaining momentum right around the time Knuth is referring to in the quote.
Bill the Lizard
Too bad everyone ignored Knuth. The (non-)connection between the memory allocation and the data structure had me confused for some time, and I suspect the same for others.
James M.
@James M: I spent quite some time under the impression that memory was allocated in a heap data structure.
Bill the Lizard
**Timeline:** - **1968:** ALGOL68 has declarations like: ( **int** i; **ref int** r; **loc int** a; **long int** l; **int** c=1234; **short int** s; **short short int** ss; **long long int** ll; ~ ) AND ( **heap int** h; ~ ) - **1972:** C has declarations like "{ int i; int *r; auto int a; long int l; const int c=1234; static int s; extern int e; ...; } -
NevilleDNZ
+1  A: 

Just like java and javascript, heap (free store) and heap (data structure) are named such to insure that our fraternity is inpenetrable to outsiders, thus keeping our jobs secure.

James McMahon
A: 

It's a large, tangled pile of disorganized junk, in which nothing can be found unless you know exactly where to look.

Crashworks
+1  A: 

I always figured it was kind of a clever way of describing it in comparison to the stack. The heap is like an overgrown, disorganized stack.

Jon B
+3  A: 

I don't know if it is the first but ALGOL 68 had keyword 'heap' for allocating memory from the free memory heap.

The first use of 'heap' is likely to be found somewhere between 1958, when John McCarthy invented garbage collection for Lisp and the development of ALGOL 68

Arnold Spence
A: 

Heap usually has these features:

  1. You can't predict the address of a block malloc() returns.

  2. You have no idea of how the address returned by the next malloc() is related to the address of the previous one.

  3. You can malloc() blocks of variable sizes.

So you have something that can store a bunch of blocks of variable sizes and return them in some generally unpredictable order. How else would you call it if not "heap"?

sharptooth
A pool (of memory)?
TrayMan
According to dictionaries "pool" is more suitable for uniform objects. Chunks in the free store can have variable sizes and therefore are not very uniform.
sharptooth
+7  A: 
thomasrutter
Although this answers doesn't reference any external source, it sounds the most plausible.
gooli