From my understanding. (which is very very limited)
Crypto exchanges give their users a bitcoin address to send their crypto to. This address is a derived/child key from their own wallet. Once this wallet receives bitcoin the exchanges then credit their account.
But this means that the crypto is on two different wallets which means they'll have the send the crypto again which means another onchain update which means another bitcoin transaction fee
If the logic above is correct then 3 transaction fees are required to take place. Sending the bitcoin in. Merging the bitcoin into a main wallet. Withdrawaling the bitcoin. (Merging may not always be required)
My question is, if this is true (which it may not be, in which case PLEASE correct me and explain how it works) why would crypto exchanges give users their own bitcoin addresses? Why would they not just give the users their main bitcoin address and ask the users to include a user_id on the transaction memo?
Edit: I asked a similar question recently which stated, that only 2 onchain events happen. This is because the public address the user is given is actually directed to the exchanges wallet. How is an address generated from a public address?