Если вы хотите, чтобы структура имела определенный размер с GCC, например, используйте __attribute__((packed))
.
В Windows вы можете установить выравнивание в один байт при использовании cl .exe компилятор с опцией / Zp .
Обычно ЦП получает доступ к данным, который является кратным 4 (или 8), зависящей от платформы, а также от компилятор.
Итак, это вопрос выравнивания в основном.
У вас должны быть веские причины для его изменения.
Хорошо "это зависит" :)
Мы используем нашу систему CI для:
Это для проекта нового строительства приблизительно дюжины сервисов и баз данных, развернутых на 20 + серверы, которые также имели зависимости от полудюжины других 'внешних' сервисов.
Используя инструмент CI для развертывания продукта на продуктивной среде как реалистическая цель? снова... "это зависит"
Почему Вы хотели бы сделать это?
Некоторые технические вещи, к которым необходимо обратиться, прежде чем можно будет ответить на это:
Вот несколько недавних ссылок по теме об автоматизации и создании инструментов, в которых Вы нуждаетесь.
Когда это сводится к нему, чем более сложный Ваша система, тем более трудно, это действительно автоматизируют все, но это не означает, что это не достойная цель, просто прилагает намного больше усилий и силы воли, чтобы сделать его - все от знания трудностей, с которыми Вы собираетесь столкнуться, проблемы, которые необходимо объяснить (отказ произойдет), политические проблемы создания инфраструктуры (по сравнению с большим количеством функций продукта).
Теперь вот большой секрет... технические проблемы сложны, но не невозможны..., политические проблемы могут быть непреодолимыми. Все об этом стоит денег ли его dev время или покупающий решения других производителей. Таким образом, действительно можно ли создать $1 тысячу, $10 тысяч, $100 тысяч, или решение за $1 миллион?
Независимо от того, что решение, для которого Вы идете, удостоверяется, что автоматизация является устойчивой первой, полной секундой..., т.е. удостоверьтесь, что у Вас есть столь устойчивое решение, как Вы можете для получения развертывания на тестовой среде, а не хрупком решении, которое развертывается к производству.
CI не предназначается как механизм развертывания. Хорошо иметь Ваш CI, выполняют любое автоматизированное развертывание на QA/тестовом сервере, для обеспечения тех аспектов работы сборки, но я не использовал бы систему CI как Круиз-контроль или Бамбук как средства развертывания.
CI для создания кодовой базы периодически для автоматизации выполнения автоматизированных тестов, проверки кодовой базы через статический анализ и другие проверки той природы.
Убедитесь, что Вы понимаете идею позади сборки CI. CI обозначает Непрерывную Интеграцию, и сборки CI действительно предназначаются, чтобы быть одноразовыми сборками, которые выполняются, когда разработчик регистрирует код к системе управления исходным кодом (или в некотором указанном интервале), чтобы гарантировать, чтобы новейшие изменения не повреждали кодовую базу (следовательно идея непрерывной интеграции изменений в кодовой базе).
С этой целью технология, используемая для фактического серверного процесса сборки, в основном не важна по сравнению с тем, что на самом деле происходит во время сборки. Как @pdavis упомянутый, сборка CI должна скомпилировать кодовую базу, выполнить некоторый анализ кода (FxCop, StyleCop, Линт, и т.д.), выполнить модульные тесты и кодировать покрытие и выполнить любой другой пользовательский анализ, который Вы хотите выполненный, который должен повлиять на понятие "успешной" или "неудавшейся" сборки.
Наличие сборки CI автоматически развертывается к среде, действительно не подпадает под управление сервера сборки. Однако можно всегда создавать отдельный проект, который работает на сервере сборки, который обрабатывает развертывание, когда это обнаруживает определенные условия (такие как сборка, завершается успешно), но это должно всегда делаться как абсолютно независимая вещь.
Я запускаю на новом проекте на работе, которой я действительно с нетерпением жду. Мы находимся все еще в начальной стадии проектирования и только что недавно завершили Логическую Архитектуру системы. Мы заказали новые серверы для тестирования и подготовки сред и настраиваем систему сборки Непрерывной интеграции (CI) на основе Круиз-контроля (http://cruisecontrol.sourceforge.net/) и MSBuild (http://msdn2.microsoft.com/en-us/library/wea2sca5.aspx), который является в основном улучшенным портом МУРАВЬЯ. Кажется, что проект Visual Studio 2005 года и файлы решения - все теперь в формате MSBuild. Круиз-контроль будет автоматически вытягивать источник из Визуального Безопасного Источника (хорошо, это не Подверсия, но мы можем иметь дело), компилируя его, и затем выполнение его через fxCop (http://www.gotdotnet.com/Team/FxCop/), nUnit (http://www.nunit.org/), nCover (http://ncover.org/site/), и продержитесь, но не арендуйте Человекообразную обезьяну (http://www.redhillconsulting.com.au/products/simian/). Круиз-контроль имеет довольно хороший интерфейс веб-сайта для отображения всех скомпилированных результатов различных инструментов и может даже отобразить изменения кода от одной сборки до следующего. Это также отслеживает все сборки в истории сборки. Я с нетерпением жду разработки через тестирование и думаю, что этот тип подхода, объединенного с nUnit/nCover, должен дать нам довольно хорошую идею, прежде чем мы развернем изменения, что мы ничего не повредили. Существуют также планы включить некоторый тип автоматизированного пользовательского интерфейса, тестирующего, после того как мы далеко достаточно приезжаем в проекте. В зависимости от инструмента это должно быть просто вопросом установки инструмента на сервере сборки и вызове его от Круиз-контроля. Сладкий.
Хороший процесс CI будет иметь полное или почти полное покрытие модульного теста. Модульные тесты тестируют классы и методы, по сравнению с интеграционными тестами, которые тестируют несколько частей системы. Когда Вы настраиваете свои сборки CI, сделали, чтобы они автоматизировали модульные тесты. Тем путем сборки CI могут работать многократно в день. Мы имеем, наши устанавливают для выполнения каждые 2 часа.
У Вас могут быть более длинные рабочие сборки, которые работают однажды в день. Они могут использовать другие сервисы и выполнить интеграционные тесты.
Я следил за презентацией ThoughtWorks (создатели Круиз-контроля), и они на самом деле решили эту проблему. Их ответ - то, что НИКАКОЕ развертывание не слишком сложно для тестирования. Почему? Поскольку иначе, Ваши клиенты становятся Вашими тестерами, который является точно, где Вы не хотите быть.
Если Вы имеете сложную структуру развертывания, настраиваете сервер визуализации. Имейте его, симулируют быть всеми системами, с которыми необходимо говорить. Они могут всегда запускать в известном хорошем состоянии, потому что можно сбросить к чистому изображению.
Для ответа на начальный вопрос хороший процесс является тем, который включает коммуникацию между репозиторием и разработчиками. Если репозиторий находится в плохом состоянии (не компилирующий код, проваленные тесты, и т.д.), разработчики знают об этом как можно скорее, так, чтобы они могли исправить его.
Чем позже ошибка обнаружена, тем более дорогостоящее это для фиксации. Таким образом, ошибки должны быть обнаружены как можно раньше. Это - мотивация позади CI.
Хороший CI должен гарантировать ловле как можно больше ошибок. Целое приложение включает код (часто на нескольких языках), Схема базы данных, файлы развертывания и т.д. Ошибки в любом из них могут вызвать ошибки - таким образом, CI должен попытаться осуществить как можно больше из них.
CI не заменяет надлежащую дисциплину QA. Кроме того, CI не должен быть очень всесторонним в день один из проекта. Можно запустить с простого процесса CI, который делает основную компиляцию и поблочное тестирование первоначально. Поскольку Вы обнаруживаете больше классов ошибок в QA, необходимо адаптировать процесс CI, чтобы попытаться поймать будущие случаи тех ошибок. Это может также включить статические проверки анализа кода, так, чтобы можно было реализовать последовательное кодирование и разработать идеалы через кодовую базу.
Достаточно хорош хороший хороший процесс сборки CI когда его автоматизированный к QA и руководству оттуда?
Я думаю, то "ручное" развертывание используется, когда у человека с ролью инженера развертывания есть страх, что что-то после развертывания может пойти не так, как надо. У него нет уверенности в надежности инструментов развертывания и устойчивости.
Этот подвиг может уйти с тестированием процесса автоматизированного развертывания на подобной напоминанию среде. Это также должно протестировать механизм отката после развертывания.
Когда это функционирует, тестируются достаточно, Вы завоюете доверие в этом процессе и инструменте, который Вы используете.