Here's where I noticed. Through the memory manager you can allocate a maximum of ptrUint bytes in one continuous block, that is 18446744073709551615.
"function GetMem(size:ptruint):pointer; "
But block copy and fill operations can only work with at most SizeInt bytes, that is 9223372036854775807.
"Procedure Move(const source;var dest;count:{$ifdef MOVE_HAS_SIZEUINT_COUNT}SizeUInt{$else}SizeInt{$endif});"
This is halved and equals only the maximum size of the static array....
" TTest = array[0..9223372036854775806] of byte;"
At the same time on other digits - it is not so and the maximum size of the buffer allocated in memory is equal to the size of procedures to work with them.
It may be a trifle, but I program input-output of large dynamic objects in memory and try to parallelize it as much as possible and to speed it up... :-)
It's not a question - I was just a bit surprised, that there is no uniformity in actually related procedures, for x64, and I have to bring different types of integer variables to each other, which is an unnecessary operation, in my opinion...