In this blog entry by Andrey Karpov entitled, \"About size_t and ptrdiff_t\" he shows an example,
for (ptrdiff_t i = 0; i < n; i++)
a[i] = 0;
In a blog post, I argue that you should always refrain from allocating memory blocks larger than PTRDIFF_MAX
(*), because doing so will make compilers such as Clang and GCC generate nonsensical code even if you do not subtract pointers to that block in a way that causes the result to overflow.
(*) Even if malloc
succeeds when you pass it a value larger than PTRDIFF_MAX
. The crux of the problem is that GCC and Clang only generate code that behaves correctly when linked with such a malloc
, but Glibc provides a malloc
function that does not implement this limitation.
If you follow that constraint (which I encourage you to: that's the message of the blog post), then both types are equally correct.
This said, since only positive offsets need to be represented, size_t
would be the natural choice in your example.