_start используется вместо main -> где нет main, там обычно нет и std -> код, где нет ни main, ни std обычно используется либо в осях, либо в эмбеддед -> чата по расту и осям нет -> надо пойти в чат по расту и эмбеддед
Потому что _start это символ с адресом стартового кода. Обычно кода из crt0 который настраивает environment и потом вызывает main, так что при наличии main он тоже есть и никуда не девается, это просто место с которого начнется исполнение (и то при дефолтной линковке с сишными либами, так то его хоть _huj можно назвать)
по крайней мере так работают современные ос показывая якобы консольный режим, потому как остальное это издевательство с заменой кодовых таблиц и прочее