|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
24.07.2012, 09:05 | #21 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
А типобезопасность присутствует. При помощи тех же шаблонов, правда не variardic. Вот такой подход учитывает выравнивание? Код:
Последний раз редактировалось _Bers; 24.07.2012 в 09:08. |
|
24.07.2012, 20:23 | #22 | |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Цитата:
Код:
|
|
24.07.2012, 20:38 | #23 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
а вы учли передачу не через стек?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
24.07.2012, 20:46 | #24 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Получается, что выравнивание данных на стеке, и выравнивание данных в полях структур выполняется разными способами?
|
25.07.2012, 20:39 | #25 | |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Цитата:
Как правило структуры выравниваются по наибольшему значению, что в них присутствует, а не по машинному слову. В Вашем примере структура будет занимать 8 байт (каждое поле по 4 байта), что опять таки не годится, ведь на 64-битных машинах два переданных значения будут занимать в сумме 16 байт в стеке (что видно на схеме, которую я привёл в предыдущем посте). |
|
25.07.2012, 20:56 | #26 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Ну вот взять например: Код:
Я думал, что компиль выравнивает структуры так же, как и аргументы на стеке. Но дело даже не в этом. Дело вот в чем: Код:
Код:
Судя по поведению, во втором случае, компилятор разместил аргументы не один за другим на стеке, а черти как. Та область, которая якобы была предназначена для второго аргумента - там оказалось непонятное нечто. В общем, я решил вообще отказаться от идеи транспортировки данных по адресу первого аргумента. Лучше пусть будет лишнее копирование всех аргументов, но это будет безопасно, контролируемо, и портируемо. /зы Всякие макросы с которыми работают printf и компания - не помогли. Я так и не понял причину мусора на месте второго аргумента. Последний раз редактировалось _Bers; 25.07.2012 в 20:59. |
|
26.07.2012, 01:48 | #27 | |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Цитата:
Наиболее разумно, с моей точки зрения. Помещение данных в стек - быстрая операция (во всяком случае примитивных типов, включая указатели и ссылки) и едва она особо скажется на производительности. Плюс, часть вызовов могут быть встроены компилятором. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
malloc в С++ | _Kitten_ | Помощь студентам | 2 | 12.12.2011 19:20 |
Malloc | Sabin4ik | Общие вопросы C/C++ | 12 | 18.02.2011 01:13 |
функция malloc() для разного типа переменной. | Serjuk | Помощь студентам | 46 | 05.01.2010 21:52 |
SIEGSEGV в malloc() | TheVampire | Общие вопросы C/C++ | 0 | 25.09.2009 14:32 |
Проблема с malloc | Обледеневший | Общие вопросы C/C++ | 7 | 14.09.2009 18:06 |