There is some confusion in your question. The constructor is, by definition, a special function called during deploy (as last thing done) and, in general, it contains initialization code for the rest of the contract.
The constructor is automatically called before to declare “deployed” the contract and it is not stored on blockchain: it is a once only, deploytime only, function.
In particular you cannot find any code from constructor if you watch at the bytecode of any already deployed contract: it simply does not exist anymore.
On the contrary the fallback function is simply a function without name that the system calls when any call for a named function that does not exist arrives to the contract. In that sense, if your contract DOES NOT have a function
if you try to call a function named foo in your contract, by default the fallback will be called.
In the same way, if ether are sent to your contract without any valid function name call in the transaction, the contract execs your fallback.
Given this, the “constructor” keyword substitutes the old convention (up to 0.4.22 compiler version if I’m not wrong) that was to declare the constructor using as function name the same name of the contract. Now this is no more working and you have to declare “constructor” it.