No they cannot. Code that is loaded into memory stays in memory when three is no swap. (Mlock is to prevent swap out or compression - major faults.)
The exception would be lazy library loading. BIND_NOW is your friend in this case.
Essentially having no swap is similar to having everything mlocked - no major faults can happen except with mmapped files which will just use direct disk IO.
If you mean disk caches, when have you seen a multigigabyte executable?
Code that is loaded into memory stays in memory when three is no swap.
That is not true. In the normal case (absent debugging, JIT, self-modifying code etc), pages of executable code are clean, shared mappings so they do not interact with swap at all.
As clean, shared mappings they are eligible to be dropped from the page cache in the same way as other clean file mapped pages.
(Your executable code pages essentially are mmapped files. )