Skip to content

Comment on HPE Drive fail at 32,768 hours without firmware updateparent

Comments

Using signed integers for values that are always positive isn't necessarily a mistake. Most notably because for signed integers (in C and C++) overflow is undefined behavior. This allows for more aggressive optimizations by the compiler.

Some advice I've read is to only use unsigned integers if you want to explicitly opt-in to having overflow be defined behavior.

Some advice I've read is to only use unsigned integers if you want to explicitly opt-in to having overflow be defined behavior.

I read somewhere that the true reason for that advice is that it allows the compiler to silently store an "int" loop counter in a 64-bit register, without having to care about 32-bit overflow. If you use size_t for the loop counter, that's no longer an issue.

I haven't seen an example where that's the case.

It commonly factors in loop analysis around unrolling and vectorization, e.g. the loop will run exactly 16*n times OR an integer will overflow and it'll run some other number of times.

Use of signed precludes the overflow and the exact bound enables efficient vectorization.

At least on X86 that truncation behavior is free. 32-bit EAX is just first 32-bits of RAX.

Undefined behavior is platform-specific behavior. In this case it means that rollover’s effect on the value depends on how the register stores the integer and on how the particular instruction is documented to behave.

No, undefined behavior is specified by the standard. There is also 'implementation defined' which tends to be both architecture and compiler specific.

The difference is that a program which invokes 'implementation defined' behavior can be well defined, whereas a program that invokes undefined behavior is literally free to do anything.

This allows for more aggressive optimizations by the compiler.

And also more useful warnings from static analysis, since if the analysis can prove that the value will overflow this is guaranteed to be an error.

AboutSource Built by g1lg1l

Hackerly is an independent reader for Hacker News, built on the public HN API. Not affiliated with Y Combinator.