tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: aligned_alloc c11 function
> On 5 Nov 2015, at 21:35 , Robert Elz <kre%munnari.OZ.AU@localhost> wrote:
>
> Date: Thu, 5 Nov 2015 18:24:36 -0800
> From: Dennis Ferguson <dennis.c.ferguson%gmail.com@localhost>
> Message-ID: <868C6B45-9254-4829-B035-BE9A186C211E%gmail.com@localhost>
>
> | That said, I do think this should be done your way for functional reasons.
> | Your code does what I think is the right thing in the case where both size
> | and alignment are zero-valued, but the while() loop code probably doesn't.
>
> 0 is not a power of two, and hence is invalid as the alignment,
> according to the proposed interface spec. It also makes no sense.
Yes, I realized I’d goofed that about 3 minutes after I’d posted, but
I’d already turned off the computer and was too sleepy to turn it back
on. I’d fixated on the idea that
(x & (x - 1)) == 0
is true only if `x’ is a power of 2 but that’s clearly wrong. The test
for a power of 2 needs to be
(x & (x - 1)) == 0 && x != 0
> What's more, the code already checks for that, and returns EINVAL if
> alignment == 0, so the while loop doesn’t need to worry about that case.
Ah, the code I was looking at didn’t do that and failed when both
alignment == 0 and size == 0. It was that bug that made me think the
while() loop was a problem, but that isn’t what needed fixing. I
assume the explicit check for alignment == 0 got added to the if() when
I wasn’t paying attention?
Dennis Ferguson
Home |
Main Index |
Thread Index |
Old Index