На x86, x86_64 - не должно. В стек помещается машинное слово. Т.е. 4 и 8 байт соответственно. Но это архитектурозависимо, да.
Нет, вспомнил. Стандартом гарантируется, что при переменном списке аргументов все целые приводятся к (unsigned) long. Так что с char это работает законно, архитектуронезависимо.
На x86, x86_64 - не должно. В стек помещается машинное слово. Т.е. 4 и 8 байт соответственно. Но это архитектурозависимо, да.
Т.е. делая push ax я помещаю в стек 4 байта? Что-то не верится. Или компилятор просто генерирует код, в котором в стек всегда помещается машинное слово?
На x86, x86_64 - не должно. В стек помещается машинное слово. Т.е. 4 и 8 байт соответственно. Но это архитектурозависимо, да.
Т.е. делая push ax я помещаю в стек 4 байта? Что-то не верится. Или компилятор просто генерирует код, в котором в стек всегда помещается машинное слово?
просто если список аргументов переменный (int printf(char const *, ...)), то все целые аргументы передаются как long, т.е. как 4 (8) байт.
в случае явного описания (int f(char c)) в стек будет загоняться 1 байт.