#40315: c++17 std::aligned_alloc Open Date: 2020-04-10 05:55 Last Update: 2020-04-11 17:18 URL for this Ticket: https://osdn.net//projects/mingw/ticket/40315 RSS feed for this Ticket: https://osdn.net/ticket/ticket_rss.php?group_id=3917&tid=40315 --------------------------------------------------------------------- Last Changes/Comment on this Ticket: 2020-04-11 17:18 Updated by: keith Comment: Reply To drakbar I am not sure if this helps, but it seems that GCC version 7.4 implemented this. Likely when they implemented ISO-C11, or maybe just ISO-C++17 support; (I erroneously referred to ISO-C99, but aligned_alloc() support was added later). However, that GCC support was likely restricted to POSIX.1 compliant platforms, which windows is not. Now I realize that a GCC in a browser is different than a GCC on windows, but I guess I am a bit confused. Huh? GCC doesn't (normally) run in a browser; it runs on a variety of host platforms, but primarily those which are POSIX.1 compliant. I was under the impression that upstream GCC wouldn't be concerned if it works on windows. Upstream has supported mingw32 for years, but never as a primary target. For GCC-3.4.5, it was a secondary target; today it may have been demoted to tertiary. However, that's bye-the-bye: a MinGW.org release is no more than our binary build from upstream source — with a few local patches — but aligned_alloc() is difficult to implement, because Microsoft's underlying APIs are incompatible with its standardized requirements; (see the other ticket, to which I referred you). Welcome to the world of programming on windows; you often have to work around Microsoft's violation of standards. In the case of aligned_alloc(), you may need to consider _aligned_malloc(), (which you then need to pair with _aligned_free()). --------------------------------------------------------------------- Ticket Status: Reporter: drakbar Owner: (None) Type: Issues Status: Open Priority: 5 - Medium MileStone: (None) Component: GCC Severity: 5 - Medium Resolution: None --------------------------------------------------------------------- Ticket details: According to cppreference, the function std::aligned_alloc is apart of C++17. When trying to compile the example code found at that page, the following compilation error occurs: src code 1. #include <cstdio> 2. #include <cstdlib> 3. 4. int main() 5. { 6. int* p1 = static_cast<int*>(std::malloc(10*sizeof *p1)); 7. std::printf("default-aligned address: %p\n", static_cast<void*>(p1)); 8. std::free(p1); 9. 10. int* p2 = static_cast<int*>(std::aligned_alloc(1024, 1024)); 11. std::printf("1024-byte aligned address: %p\n", static_cast<void*>(p2)); 12. std::free(p2); 13. } compilation output $g++ -std=c++17 alignment.cpp -o main alignment.cpp: In function 'int main()': alignment.cpp:10:38: error: 'aligned_alloc' is not a member of 'std' 10 | int* p2 = static_cast<int*>(std::aligned_alloc(1024, 1024)); gcc version Target: x86_64-w64-mingw32 Configured with: ../gcc-9.3.0/configure --prefix=/mingw64 --with-local-prefix=/mingw64/local --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --with-native-system-header-dir=/mingw64/x86_64-w64-mingw32/include --libexecdir=/mingw64/lib --enable-bootstrap --with-arch=x86-64 --with-tune=generic --enable-languages=c,lto,c++,fortran,ada,objc,obj-c++ --enable-shared --enable-static --enable-libatomic --enable-threads=posix --enable-graphite --enable-fully-dynamic-string --enable-libstdcxx-filesystem-ts=yes --enable-libstdcxx-time=yes --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-isl-version-check --enable-lto --enable-libgomp --disable-multilib --enable-checking=release --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --enable-plugin --with-libiconv --with-system-zlib --with-gmp=/mingw64 --with-mpfr=/mingw64 --with-mpc=/mingw64 --with-isl=/mingw64 --with-pkgversion='Rev1, Built by MSYS2 project' --with-bugurl=https://sourceforge.net/projects/msys2 --with-gnu-as --with-gnu-ld Thread model: posix gcc version 9.3.0 (Rev1, Built by MSYS2 project) platform Windows 10 Build: 18362.720 linker version GNU ld (GNU Binutils) 2.34 mingw version not quite sure which number is the relevant one in _mingw.h ?? build environment I have tested using both windows command prompt and the msys-w64 shell, and both yield the same result MINGW64_NT-10.0-18362 3.0.7-338.x86_64 2019-07-11 10:58 UTC x86_64 Msys -- Ticket information of MinGW - Minimalist GNU for Windows project MinGW - Minimalist GNU for Windows Project is hosted on OSDN Project URL: https://osdn.net/projects/mingw/ OSDN: https://osdn.net URL for this Ticket: https://osdn.net/projects/mingw/ticket/40315 RSS feed for this Ticket: https://osdn.net/ticket/ticket_rss.php?group_id=3917&tid=40315