_cl_device_id is internal to the platform (like all _cl_something structs). Furthermore, an OpenCL program can have multiple platforms loaded, and for each platform the struct sizes can (and likely will) be different.
All cl_objects in general are opaque pointers, and (in general) copying around hidden internal structs of a C library is a pretty extreme approach, almost guaranteed to screw things up (unless you're working on implementing a debugger or such).
But anyway leaving motivation aside, the answer is: you can't tell, since you don't know until the program actually runs and loads the OpenCL implementation(s).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…