3 ms·
Would love to see a Windows-based version of this article. No sbrk() or mmap() in Windows makes the implementation a bit different.
by jimbob45 7y ago
Would love to see a Windows-based version of this article. No sbrk() or mmap() in Windows makes the implementation a bit different.
- userbinator 7y agoWindows has VirtualAlloc which is like mmap, but you're right that it has no concept of a "break"; in fact, the stack of the main thread is below (most of) the heap in Windows, below the executable itself. In pseudopictorial form, Linux/most other *nix: | executable | libs | heap---> <--- stack | Windows: | <--- stack | heap | executable | heap | libs | heap---> |
- marvy 7y agoDoes this picture change much between the 32-bit vs 64-bit world? How about if there are few vs many threads? (For instance, if a program on 32-bit windows spawns hundreds of threads, surely you can't squeeze all those stacks below the heap, can you?)
- userbinator 7y agoThe 64-bit address space is much bigger and even more unpredictable when there's ASLR, but in my experience the main thread's stack still ends up below the executable; they're just much farther apart. I believe other threads' stacks also fit somewhere below, but with 32-bit it will start allocating them in areas that would've otherwise been heap once the area below the executable runs out.
- marvy 7y agothanks!
- zerr 7y agoBtw brk and sbrk are deprecated in POSIX anyway.