Chương trình này (được biên dịch với tùy chọn -std=c++17
)
#include <stdio.h>
#include <string>
void* operator new(std::size_t nrOfBytes) {
printf("allocate %zd bytes on heap\n", nrOfBytes);
void* p = malloc(nrOfBytes);
if (p) {
return p;
} else {
throw std::bad_alloc{};
}
}
int main() {
// new operator is called when compiled with Clang or MSVS or GCC
int* i = new int;
delete i;
// new operator is not called when compiled with GCC
// but is called with Clang and MSVS
std::string str(2000, 'x');
return 0;
}
khi được biên dịch bằng Clang hoặc MSVS, hãy in:
phân bổ 4 byte trên heap
phân bổ byte 2016 trên heap
Tuy nhiên, khi được biên dịch bằng GCC (Phiên bản 9.2.0 do MSYS cung cấp trên Windows), nó chỉ in:
phân bổ 4 byte trên heap
Tôi biết về tối ưu hóa chuỗi ngắn trong GCC / libc ++, nhưng không phải 2000 ký tự quá nhiều cho một chuỗi ngắn? Đây có phải là vấn đề của SSO không?