Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевод терминов на русский 
:(
    Опции темы
bsa
Дата 23.1.2012, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



думаю речь о том, что выделенный массив char должен быть выровнен по самой строгой границе. Т.е. если объекты размером 8 байт должны быть выровнены по границе 64-х битного слова. Т.е. адрес приведенный к int должен делиться без остатка на 8.
PM   Вверх
drug007
Дата 25.1.2012, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



Цитата(bsa @ 23.1.2012,  20:34)
думаю речь о том, что выделенный массив char должен быть выровнен по самой строгой границе. Т.е. если объекты размером 8 байт должны быть выровнены по границе 64-х битного слова. Т.е. адрес приведенный к int должен делиться без остатка на 8.

Это понятно. Непонятно что за разница имеется в виду между new-выражением и функцией выделения. 
Как следует из стандарта, new-выражение вызывает функцию выделения для непосредственного выделения памяти. При этом new-выражение знает о типе для которого выделяется память, а функция выделения нет. Т.е. возможно, что функция выделения выделит память невыравненную нужным образом и выравнивание должно выполнить new-выражение? Может быть это имеется в виду под разницей? Т.е. new-выражение должно выделить память для типа с выравниванием 8 байт, а функция выделения выделила блок памяти с адреса 0х0ААА4, т.е. выравненный по 4 байтной границе. Тогда new-выражение проигнорирует первые четыре байта и вернет не 0хААА4, а вернет 0хААА8? Может здесь это имеется в виду? 
В пользу моих логических рассуждений еще говорит фраза "...this constraint on array allocation overhead permits the common idiom...", буквально означающая "...это ограничение накладных расходов на выделение массивов позволяет использовать общую идиому..."
PM MAIL   Вверх
bsa
Дата 25.1.2012, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



drug007, в любом случае, malloc возвращает область выровненную по самой строгой границе. Если ты используешь ее, то расслабься.
PM   Вверх
drug007
Дата 26.1.2012, 04:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



Цитата(bsa @ 25.1.2012,  19:50)
drug007, в любом случае, malloc возвращает область выровненную по самой строгой границе. Если ты используешь ее, то расслабься.

Да я вообще не напрягаюсь. Просто при переводе столкнулся с нюансом и теперь хочу это выяснить - честно говоря, лично я бы и без этого нюанса прожил, но поскольку перевод выложен для всех, чувствую ответственность, чтобы перевод был правильный, а не абы как.
malloc как раз возвращает память с самым слабым выравниванием, подходящим для объектов любого типа - мы же тип объекта в нее не передаем, а только размер в байтах и она просто не в состоянии выровнять память по какому-либо конкретному типу.
PM MAIL   Вверх
bsa
Дата 26.1.2012, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(http://linux.die.net/man/3/malloc)
The malloc() and calloc() functions return a pointer to the allocated memory that is suitably aligned for any kind of variable.

Цитата(C Language Standard)
The pointer returned if the allocation succeeds aligned so that it may be assigned to a pointer to any type of object with a fundamental alignment requirement and then used to access such an object or an array of such objects in the space allocated (until the space is sxplicitly deallocated).


Это сообщение отредактировал(а) bsa - 26.1.2012, 10:33
PM   Вверх
drug007
Дата 26.1.2012, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



bsa, конечно же вы правы, именно строгое выравнивание. 

Вообще, я решил оставить этот вопрос про разницу между результатом new-выражения и результатом функции выделения памяти - буду считать что понял и перевел правильно. А если неправильно - то все равно всем без разницы  smile , я время только зря трачу. А вам, bsa, спасибо за диалог. smile
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1202 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.