The context of a variable determines both its scope but also its data type (size).
The size of a pointer and a long vary by the bitness of the probed process, an int does not. Variable size types assume 64 bit values in the ProbeVue environment, but the first write (in this example) happened in a 32 bit process.
There is no known (to me) method for determining bitness of an application from probevue (short of calling sizeof() on a context sensitive / variable size data type).
NOTE: The prototype for write() depends on defines but usually maps to the following line in unistd.h:
extern ssize_t write(int, const void *, size_t);
ssize_t is a signed long (typedef in sys/types.h)
size_t is a long (typedef in sys/types.h)
[Personal note: My understanding of the ÒexternÓ keyword in this context is that the function is really provided by the kernel and is not actually in libc.]
The data types specified in the prototype do not matter to the results of this script. Declaring int or (unsigned) long in this example does not change the results. (Most of the examples in the Extended User Guide Specification use ÒintÓ in place of size_t.)