4 ms·
If you're going to use local allocation of short lived buffers then don't use malloc but use alloca. That's much cleaner. http.c around line 398, that looks wr
by jacquesm 1y ago
If you're going to use local allocation of short lived buffers then don't use malloc but use alloca. That's much cleaner.
http.c around line 398, that looks wrong.
- gpm 1y agoI've been told that modern compilers really don't like alloca, is that wrong?
- jacquesm 1y agoI don't know who told you. But it's a lot slower than malloc, and requires you to do a bunch of bookkeeping, which is easy to mess up if you have multiple exits from your function.
- CyberDildonics 1y agoalloca is just a couple of instructions to allocate more memory on the stack, it is much faster than malloc for pretty much every reason including locality and the fact that it doesn't have to be freed because it goes away after the current scope.
- 1718627440 1y agoIs there a difference between: T * ptr = alloca (size); and char buffer[size]; T * ptr = &buffer; under the assumption that this happens at the top-level of a function?
- CyberDildonics 1y agoNot that I know of
- lelanthran 1y ago> But it's a lot slower than malloc How would it be slower? Isn't it simply bumping the stack pointer?
- jacquesm 1y agoYah, brainfart, I meant faster. And yes, that's pretty much what it does.
- 201984 1y agoArenas would be a better fit for a webserver. Allocations are basically free and everything gets deallocated all at once, so having one arena per active request and resetting it between requests can give very high performance. Using alloca will result in stack overflows if you use more than a couple megabytes, so it isn't a very good idea.
- jacquesm 1y agoThose buffers are tiny and they won't result in stack overflows because the whole thing is single threaded, it is beginner level code.