Hacker News new | ask | show | jobs
by vardump 2853 days ago
That's not true. You can also control data alignment in various ways. For example, you don't need to write to the beginning of an allocated buffer, but skip to the point where low order address bits are what you want.

Something like this for example:

  char* aligned_buf;
  char* buf;
  size_t max_align_offset = (1<<align) - 1;
  buf = malloc(length_needed + max_align_offset);
  aligned_buf = (buf + max_align_offset) & ~max_align_offset;
In the example, if align==8, you have 256 byte alignment. If it's 12, 4kB alignment.
2 comments

Good luck ensuring that doesn't trigger UB across all target architectures and compilers being used.
I agree, but that's besides the point.

It was just an example to show one way how C can control alignment.

This example looks like it should be turned into a malloc variant, i.e. needs only to be written once. Raw pointer access is also available in other languages of course, albeit it is usually made much more difficult.