OpenCL implements the following disjoint address spaces: __global, __local, __constant, and __private The
address space qualifier may be used in variable declarations to specify the region of memory that is used
to allocate the object. The C syntax for type qualifiers is extended in OpenCL to include an address
space name as a valid type qualifier. If the type of an object is qualified by an address space name, the
object is allocated in the specified address name; otherwise, the object is allocated in the generic
address space.
The address space names without the __prefix i.e. global, local, constant and private may be substituted
for the corresponding address space names with the __prefix.
The generic address space name for arguments to a function in a program, or local variables of a function
is __private. All function arguments shall be in the __private address space.
functionQualifiers(3clc) function arguments declared to be a pointer of a type can point to one of the
following address spaces only: __global, __local or __constant. A pointer to address space A can only be
assigned to a pointer to the same address space A. Casting a pointer to address space A to a pointer to
address space B is illegal.
Function arguments of type otherDataTypes(3clc), otherDataTypes(3clc), otherDataTypes(3clc),
otherDataTypes(3clc), otherDataTypes(3clc), and otherDataTypes(3clc) refer to image memory objects
allocated in the __global address space.