查了一下，这样写， 0 - size 的结果依然是 uint32_t。应该这样写：
int32_t offset = -static_cast<int32_t>(size);