Provisioning is at volume level. Thick Provisioning makes you reserve the entire volume size (you specify while creating) from the aggregate. Where as Thin Provisioning doesn't reserve any space from the aggregate. But as it fills up, it starts occupying the space from the aggregate. The space limit in this case would be the size you mentioned while creating the volume.
You can choose the type of provisioning by changing 'space reservation' parameter in volume options.
space reservation: 'volume' for Thick Provisioning; 'none' for Thin Provisioning
SnapReserve holds same in both the cases as it is part of the volume. Whatever the percentage you provide, it will be applicable.
Eg: Consider vol_thick 100 GB total size and snapreserve 20%, it reserves 100 GB from aggregate of which 80 GB will be for volume and 20 GB will be for snapreserve.
And for vol_thin the same policy applies, you cannot write data into volume after occupying 80 GB space from aggregate.
Anyway, the size limit in case of thin provisioning varies with parameters like 'autogrow'.
QSM is inode/file based mirroring and VSM is block based mirroring. There are many differences between VSM and QSM.