Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

new/malloc align - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ввести текст до первого символа '.' , и подсчитать количество символов 'А' в каждом слове http://www.cyberforum.ru/cpp-beginners/thread1050751.html
1) Ввести текст до первого символа '.' , и подсчитать количество символов 'А' в каждом слове. #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "Russian");...
C++ С клавиатуры вводится строка символов, содержащая ':'. Определить, сколько символов стоят после двоеточия 1. С клавиатуры вводится строка символов, содержащая ':'. Определить, сколько символов стоят после двоеточия. одна тема - одна задача. http://www.cyberforum.ru/cpp-beginners/thread1050743.html
Вычисление нок и нод переменных натуральных чисел C++
Здравствуйте. Искал подобную тему по форуму, но там все либо на 2 числа либо на несколько, но с фиксированным числом после компиляции. Вообщем используя stdarg.h нужно сделать код программы для...
C++ обработать исключительные ситуации
Функция вычисляет корень квадратного уравнения ax2+bx+c=0 Нужно обработать исключительные ситуации
C++ Найти наименьший по модулю элемент в первой строке матрицы http://www.cyberforum.ru/cpp-beginners/thread1050719.html
Найти наименьший по модулю элемент в первой строке матрицы. #include "stdafx.h" #include <iostream> #include <locale.h> using namespace std; int main() { setlocale (0,"Russian"); int...
C++ Суффиксный массив Доброго времени суток! Помогите пожалуйста реализовать суффиксный алгоритм поиска подстроки в тексте. Заранее благодарен подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
18029 / 6261 / 427
Регистрация: 30.03.2009
Сообщений: 17,200
Записей в блоге: 27
21.12.2013, 15:59
Цитата Сообщение от nexen Посмотреть сообщение
Обращают ли внимание new/malloc на установленый align для структуры?
Нет. Как правило, new/malloc возвращают адрес памяти, выравненный на максимально выровненный базовый тип (long double). Т.е. даже если ты выделяешь 1 байт памяти, то он будет выровнен на размер long double'а (для intel'а это вроде бы 4 байт, для sparc'а - 16 байт)

Добавлено через 4 минуты
Цитата Сообщение от nexen Посмотреть сообщение
А если я уберу какую-либо переменную из структуры, то её разер по прежнему будет 32байта из-за выравнивания, ведь так?
Даже если ты оставишь в структуре 1 поле типа char, то все переменные такого типа компилятор будет выравнивать в глобальной памяти на 32 байта. Про стек сказать сложнее. В стеке статически нельзя выделить память, выровненную на 32 байта, т.к. стек выровнен на величину, зависящую от конкретного процессора (для intel вроде бы как 4 байта, для sparc - 4 байта в 32-битных режимах, 16 - в 64-битных). Т.е. для размещения такого объекта в стеке нужно в runtime вычислить текущее значение указателя стека, в runtime передвинуть его на величину с требуемым выравниванием

Цитата Сообщение от nexen Посмотреть сообщение
p.s __declspec(align(32)) -- это вообще по С++ стандарту есть такое или зависит от компилятора, или от IDE?
Это НЕ стандартная конструкция, это расширение компиляторов под windows (да и то может не для всех)

Добавлено через 1 минуту
Цитата Сообщение от nexen Посмотреть сообщение
кстати, не по теме вопрос, но не знаете, как можно заставить компилятор во время оптимизации не менять местами поля в структуре?
Компилятор НЕ меняет местами поля структуры. Ибо не имеет на это право. Т.к. распределение полей структуры - это программное соглашение (ABI).
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru