5 ms·
I don't think I've ever thought of explicitly calling main(). Made me chuckle.
by cbrpnk 2y ago
I don't think I've ever thought of explicitly calling main(). Made me chuckle.
- akdev1l 2y agoI think it is UB Edit: actually looks like it is UB in C++ but not C
- colejohnson66 2y agoWhy would calling main be UB!? How is crt0 supposed to work?
- tomjakubowski 2y agocrt0 generally isn't C and isn't subject to C's rules
- astrange 2y agomalloc() can't be implemented in C either because it's defined as doing things (creating new memory objects) there are no lower level mechanisms in C to do.
- eacnamn 2y agoall malloc is defined to do is to return a pointer to storage of appropriate size and alignment, which can easily be done in pure standard C by defining a static array and chopping it up as needed. that's not a brilliant way of doing that, but achievable without leaving standard C
- astrange 2y ago> The malloc function allocates space for an object whose size is specified by size and whose value is indeterminate. > The lifetime of an allocated object extends from the allocation until the deallocation. Each such allocation shall yield a pointer to an object disjoint from any other object. A static array is "an object" already. A pointer to the middle of it is not a new object.
- gpderetta 2y agoAFAIK that can break because of the strict aliasing rules (although it might work in practice). Even if char can alias anything, the reverse is not true and you can't legally store other types in a static array of char type. You should be able to use anonymous memory though, so for example if you get your storeag via mmap or some other allocator it should be fine.
- astrange 2y agoThere isn't anything called mmap in the C standard. That's what I mean by it not being possible to implement in standard C. It is possible in some implementations of C.
- akdev1l 2y agoAs the other person pointed out, anything that happens before main is strictly not covered by the C standard. Even things like “printf” can’t be implemented purely in standard C. Even making a syscall is outside of the scope of the C standard.