Я использовал Пружину в течение нескольких лет теперь и суммы XML, который требовался, определенно становился утомительным. Между новыми XML-схемами и поддержка аннотации в Spring 2.5 я обычно делаю эти вещи:
Используя "сканирование компонента" для автозагрузки классов, которые используют @Repository, @Service или @Component. Я обычно даю каждому бобу имя и затем соединяю их проводом вместе использующий @Resource. Я нахожу, что эта инфраструктура не изменяется очень часто, таким образом, аннотации имеют смысл.
Используя "aop" пространство имен для всего AOP. Это действительно работает отлично. Я все еще использую его для транзакций также, потому что помещение @Transactional повсеместно, своего рода перетаскивают. Можно создать названный pointcuts для методов на любом сервисе или репозитории и очень быстро применить совет.
я использую LocalContainerEntityManagerFactoryBean наряду с HibernateJpaVendorAdapter для конфигурирования, в спящем режиме. Это позволяет, в спящем режиме, легко автообнаруживают @Entity классы на пути к классу. Затем я создаю именованный боб SessionFactory с помощью "боба фабрики" и "метода фабрики", относящегося к LCEMFB.
Размер указателей на самом деле не очень хорошая вещь для тестирования - в стандартном C мало что можно сделать с результатом этого теста.
Мое предложение - test ((size_t) -1)
, самый большой размер объекта, который понимает C:
if ((size_t)-1 > 0xffffffffUL)
{
printf("> 32 bits\n");
}
else
{
printf("<= 32 bits\n");
}
Если он больше, чем 0xffffffffUL
, то в принципе вы можете иметь объекты больше, чем 2 ** 32 - 1
байт, что кажется более значимым тестом, чем туманное «32 бита против 64 бита».
(Например, если вы знаете, что максимальное значение size_t
составляет всего лишь 2 ** 32 - 1
, тогда нет смысла пытаться mmap ()
область размером более 1 или 2 ГБ.)
короткий ответ: нет
длинный ответ: это зависит от слишком большого количества комбинаций ОС / компилятора. Например, во время выполнения в Linux вы можете запросить файловую систему proc, тогда как в Windows вы можете запросить регистр.
Вы можете доказать, что компилятор, который используется для компиляции, имеет 32/64 битную цель, используя что-то вроде:
bool is_32bit() {
return sizeof(int *) == 4;
}
bool is_64bit() {
return sizeof(int *) == 8;
}
это может работать при некоторых предположениях (например, он работает во время выполнения). Вы можете выполнить поиск по запросу времени компиляции #define
для своей платформы, но это хорошо известный беспорядок.
Самый распространенный способ - проверить sizeof (void *)
и sizeof (int)
(обратите внимание, что они не обязательно должны быть то же самое).
Еще одна возможность на процессорах x86 / x64 - проверить наличие флага lm. Если он присутствует, ЦП понимает набор инструкций AMD64.
Безопасный и переносимый метод, к сожалению, невозможен (потому что безопасный и переносимый допускает только правила стандарта C.)
sizeof (int)
с некоторыми из наиболее распространенных компиляторы могут дать вам 4 для 32-битной платформы и 8 для 64-битной платформы, но это не гарантируется.
Стандарт C говорит только о том, что int должен быть «естественным» размером для вычислений на целевом объекте, и очень многие компиляторы оставили sizeof (int) равным 4 даже в 64-битном мире на том основании, что этого «достаточно» .
sizeof (void *)
лучше, потому что указатель должен иметь соответствующий размер для адресации всего адресного пространства. sizeof (void *)
, вероятно, даст вам 4 или 8 в зависимости от ситуации.
Технически, однако, даже это не гарантируется, поскольку sizeof дает вам количество байтов, необходимое для хранения чего-либо, а байт не обязательно должен быть 8 бит. Байт технически является наименьшей адресуемой единицей памяти, которая составляет 8 бит на большинстве платформ, к которым люди привыкли. 8-битная адресация очень распространена, но я работаю с чипами, которые имеют 16-битную адресацию и размер слова 16 бит (поэтому sizeof (int)
равно 1).
Итак, если ваш размер байта не 8 бит, тогда sizeof (void *)
может дать вам множество значений.
С другой стороны, если вы просто пытаетесь различать x86 и x64 (32-битные и 64-битные процессоры ПК), тогда будет достаточно sizeof (void *) и переносимость между компиляторами.
Если вы используете GCC (как указано в тегах), вы можете протестировать в качестве теста времени компиляции
#if __SIZEOF_POINTER__ == 8
, чтобы определить, является ли это 64-битной системой. Перед использованием убедитесь, что используемая версия GCC вообще определяет __ SIZEOF_POINTER __
.
32-битный в банке кодов или 32- бит в банке данных. :-) Процессоры 8086 имели 16-битные данные с 20-битной кодовой памятью. Кроме того, современные машины Havard делают странные вещи с разделением кода / данных ...
Вы можете проверить инструкцию cpuid
для процессоров x86. Другие семейства процессоров могут не иметь такой инструкции ... YMMV.
int iedx;
__asm
{
mov eax, 0x80000001;
cpuid;
mov, iedx,edx;
}
if (iedx & (1 << 29))
{
return 1;
}
return 0;