Подробности
[В начало]
Проблема в реализации № S0740
Краткое описание
На PPC32 и S390 ::operator new() возвращает неверно выровненный указатель
Подробное описание
Описание одного из операторов семейства new (для остальных функций из этого семейства требования на выравнивание аналогичное)(18.4.1.1):
void* operator new(std::size_t size) throw(std::bad_alloc);Effects: The allocation function (3.7.3.1) called by a new-expression c(5.3.4) to allocate size bytes of storage suitably aligned to represent any object of that size.
Однако, на архитектурах PPC32 и s390 при параметре size >= 16 этот оператор может вернуть адрес, не выровненный на 16 байт ( (result & 0xf) != 0). Хотя в "SYSTEM V APPLICATION BINARY INTERFACE PowerPC Processor Supplement" и "S/390 ELF Application Binary Interface Supplement" сказано, что тип long double должен иметь размер 16 байт и выравнивание на 16 байт.
В реализации оператора new() используется функция malloc, для которой проблемы выравнивания на архитектурах PPC32 и s390 известны.
Раздел стандарта
Linux Standard Base C++ Specification 3.2, Chapter 9. Libraries, 9.1. Interfaces for libstdcxx, который ссылается на ISO/IEC 14882: 2003 Programming languages --C++, section 18.4.4.1
Компонент
libstdc++
Окружение
Архитектуры
PPC32, s390
Ссылки
http://sources.redhat.com/bugzilla/show_bug.cgi?id=6527
[В начало]