Подробности

[В начало]

Проблема в реализации № 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

[В начало]