Need help?
<- Back

Comments (27)

  • mugamuga
    How would I handle memory fragmentation in this implementation of an Arena Allocator. If I do not need a piece of memory any more, is there a way to free it and possible use it for something else.
  • duckqlz
    “Types.c” is dangerous code to bring to every project.f32/64 makes assumptions about the platform.Worse yet, the macros at the bottom are all functionally incorrect. Macros like MIN/MAX need to be contained in parentheses to avoid precedence errors.For example, we take `Min(x,y)` from the code. Consider what happens if I write `ans = 2 * Min(3,4)` because of the way Min is defined that will expand to `ans = 2 * 3 < 4 ? 3 : 4` and while you may expect ans to be 3 it will infact resolve to 4.Subtle bugs like these can creep into code and cause really hard to debug errors.Finally, while u32 is a little faster to type than `uint33_t` it makes the project harder to read forcing the reader to learn the author’s personal c dialect. While it is a stylistic choice, I can’t see why anyone would want to sacrifice code highlighting and expressiveness for slightly less verbosity
  • teo_zero
    Please be aware that pointer arithmetic is not defined on void * pointers, although many compilers allow it. You had better use char * for "data".Also, your code is prone to overflow when you add data, used, alignment and size.And finally, the realloc function could be reworked to do nothing if new_size is <= old_size.
  • unwind
    More obvious problems with the code as shown:- The macros doing arithmetic (KiB, MIN etc) don't put their arguments in parentheses, that is very dangerous.- The code assumes that int and i32 are the same size.- Don't cast the return value of malloc(). Please Google this.I appreciated the use of structs by value, that's a nice design.I agree there's a risk of overflow in the arithmetic around sizes/alignment, but with a 64-bit `usize` that should be mostly theoretical.
  • sweetjuly
    > This will be used to align the data. For some reason, our computers are much better at dealing with data that is aligned at 8 bytes. This means that the start of each new allocation has to be at a multiple of 8 bytes.Casting a pointer which is not aligned to its natural alignment has undefined behavior in C. It's not just an issue of unaligned accesses being slow; in practice, your program might also crash or access unexpected data on real platforms with real compiler implementations.
  • bobbyraduloff
    Using the structs for return values with `[[nodiscard]]` looks so clean.
  • sylware
    This should definitely by a binary specification with various ISA assembly implementations.
  • mrlonglong
    Why redefine the stdints?