Какой обмен за меньшую границу стека? - PullRequest
5 голосов
/ 26 октября 2010

В gcc 4.5 стек должен быть выровнен по 16-байтовой границе при вызове функции (в предыдущих версиях требовалось только 4-байтовое выравнивание).

4-байтовый код подходит для 32-битной машины.16-байт легко выровнять, просто "и 0xfffffff0,% esp".

Но это может стоить гораздо больше памяти, чем 4-байтовая граница, не так ли?Короче, у меня такой вопрос, почему gcc 4.5 по умолчанию использует 16 байт?Это ценно?

Большое спасибо!

1 Ответ

3 голосов
/ 28 октября 2010

Ряд векторных расширений для современных процессоров требует 16-байтового выравнивания для нагрузок / хранилищ. Некоторые архитектуры предлагают невыровненные нагрузки, но обычно они значительно медленнее.

Это выравнивание может иметь некоторые преимущества для memcpy и других аналогичных низкоуровневых операций, которые чаще встречаются с более строго выровненными источниками / получателями.

Кроме того, это почти наверняка повышает шансы на успешную автоматическую векторизацию, что было включено в последние версии gcc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...