Layout of Call Data — Solidity 0.8.33-develop documentation
The input data for a function call is assumed to be in the format defined by the ABI specification. Among other requirements, the ABI specification requires arguments to be padded to multiples of 32 bytes. Internal function calls use a different convention.
Arguments for the constructor of a contract are directly appended at the end of the contract’s code, also in ABI encoding. The constructor accesses them through a hard-coded offset (and not by using the codesize opcode), since codesize changes when appending data to the code.