5 ms·
Isn't malloc one of prime reasons that makes C "less likeable"? I would imagine banning the use of malloc would make C easier, not harder to code in.
by wheelerof4te 4y ago
Isn't malloc one of prime reasons that makes C "less likeable"?
I would imagine banning the use of malloc would make C easier, not harder to code in.
- convolvatron 4y agowhat would you replace it with? stack allocation almost everywhere and acyclic reference counting when you absolutely have to?
- steveklabnik 4y agoI write Rust code without malloc equivalents. You stack allocate, you statically allocate. Anything growable either doesn’t grow, or preallocates (on the stack or statically) an upper limit and “grows” within that.
- galangalalgol 4y agoOften for dsp type stuff you'd blow out the stack for the size of a time series or image buffer. I typically preallocate when the size is known and reuse. Is yhere a good way to do that statically.
- steveklabnik 4y agoIn Rust? Simplest thing is to declare an array as a static. Mutable statics do require unsafe, because it's inherently not threadsafe, but if you wanted to stay away from that directly, just depends on what kinds of tradeoffs you're interested in making.
- galangalalgol 4y agoI didn't realize who I was replying to! But yes in rust. I have messed with mutable statics with a mutex and maybeuinit mostly for exporting stuff as a cdylib that has mutable state, and found I lose some of what I love about rust. So I heap allocate once and do borrows for each stage in my pipeline (SDR stuff). Sometimes a stage copies to cuda device mem, or back, or doesn't and just carries a device pointer through behind an abstraction. Is there a good reason to avoid preallocation on the heap?
- steveklabnik 4y agoI thought we were talking about a situation with no heap! If you have that luxury, heck yeah just call malloc.
- SAI_Peregrinus 4y agoThat's not always viable. Allowing heap allocation only at init is pretty common in embedded. Read config to get sizes, allocate at startup, never call free().
- steveklabnik 4y agoI don't understand what you mean by "That's not always viable." You can either call malloc, or you can't. If you can only call it at startup, only call it at startup. Every project has different requirements, and Rust will let you satisfy any of them.
- wheelerof4te 4y agoI believe first Warcraft game used the same technique in C, IIRC. Seems to have worked. But it would be a mess to use only stack and static memory for today's large applications.
- steveklabnik 4y agoAbsolutely, it’s a pain in the butt. But sometimes it’s what you have to do.
- AnimalMuppet 4y agoStatic buffers, which means they're created at program load time. IIRC, MISRA also allows malloc, but only at startup. And then you re-use your existing buffers.
- galangalalgol 4y agoTo be fair, that is how I code anything I want to be performant regardless of language.
- tmtvl 4y agoBan malloc, use stack only? Using C like Forth is definitely a thing someone could do.