tic.edu.vn

**GCC 4.9:** Nâng Cấp Hiệu Suất và Khám Phá Tính Năng Mới Nhất

GCC 4.9 là một bản phát hành quan trọng, mang đến nhiều cải tiến về hiệu suất, tính năng mới và sửa lỗi. Bài viết này từ tic.edu.vn sẽ giúp bạn khám phá những thay đổi quan trọng nhất trong GCC 4.9 và cách chúng có thể nâng cao trải nghiệm học tập và làm việc của bạn. Hãy cùng tìm hiểu về các cải tiến trình tối ưu hóa, hỗ trợ ngôn ngữ mới và các tùy chọn mục tiêu cụ thể giúp GCC 4.9 trở thành một công cụ mạnh mẽ cho các nhà phát triển và người học.

Mục lục:

  1. Tổng quan về GCC 4.9
  2. Những thay đổi và cải tiến quan trọng trong GCC 4.9
  3. Tối ưu hóa trình biên dịch (Compiler Optimization)
  4. Hỗ trợ ngôn ngữ mới và cải tiến ngôn ngữ (New Languages and Language Specific improvements)
  5. Cải tiến và mục tiêu cụ thể (New Targets and Target Specific Improvements)
  6. GCC 4.9.1
  7. GCC 4.9.2
  8. GCC 4.9.3
  9. GCC 4.9.4
  10. So sánh GCC 4.9 với các phiên bản trước
  11. Hướng dẫn cài đặt và sử dụng GCC 4.9
  12. Ứng dụng thực tế của GCC 4.9 trong học tập và nghiên cứu
  13. Lời khuyên và mẹo sử dụng GCC 4.9 hiệu quả
  14. Tài liệu tham khảo và nguồn học tập GCC 4.9
  15. Cộng đồng GCC và tic.edu.vn
  16. FAQ về GCC 4.9
  17. Kết luận

Contents

1. Tổng Quan Về GCC 4.9

GCC 4.9 là một bước tiến lớn trong sự phát triển của trình biên dịch GNU Compiler Collection (GCC). Phiên bản này mang đến một loạt các cải tiến và tính năng mới, tập trung vào hiệu suất, hỗ trợ ngôn ngữ và khả năng tương thích với các nền tảng phần cứng khác nhau. Với GCC 4.9, người dùng có thể tận hưởng quá trình biên dịch nhanh hơn, mã nguồn được tối ưu hóa tốt hơn và khả năng phát triển ứng dụng trên nhiều kiến trúc khác nhau.

1.1. Giới thiệu chung về GCC

GCC (GNU Compiler Collection) là một bộ trình biên dịch mã nguồn mở được sử dụng rộng rãi trong giới phát triển phần mềm. GCC hỗ trợ nhiều ngôn ngữ lập trình, bao gồm C, C++, Fortran, Ada, Go và nhiều ngôn ngữ khác. Với khả năng biên dịch mã nguồn trên nhiều nền tảng khác nhau, GCC trở thành một công cụ không thể thiếu cho các nhà phát triển phần mềm trên toàn thế giới.

1.2. Mục tiêu và phạm vi của phiên bản 4.9

Phiên bản GCC 4.9 tập trung vào việc cải thiện hiệu suất và khả năng tối ưu hóa mã nguồn. Các nhà phát triển GCC đã thực hiện nhiều thay đổi để giảm thời gian biên dịch, cải thiện hiệu quả sử dụng bộ nhớ và tạo ra mã máy tối ưu hơn. Bên cạnh đó, GCC 4.9 cũng mở rộng hỗ trợ cho các tiêu chuẩn ngôn ngữ mới nhất, bao gồm OpenMP 4.0 và các tính năng mới của C++14.

1.3. Tại sao GCC 4.9 quan trọng đối với nhà phát triển và người học?

GCC 4.9 mang lại nhiều lợi ích cho cả nhà phát triển và người học. Đối với nhà phát triển, phiên bản này cung cấp các công cụ mạnh mẽ để tạo ra các ứng dụng hiệu quả và ổn định hơn. Các cải tiến về hiệu suất và khả năng tối ưu hóa giúp giảm chi phí phát triển và vận hành phần mềm. Đối với người học, GCC 4.9 là một công cụ tuyệt vời để khám phá các ngôn ngữ lập trình mới và tìm hiểu về các kỹ thuật tối ưu hóa mã nguồn.

2. Những Thay Đổi Và Cải Tiến Quan Trọng Trong GCC 4.9

GCC 4.9 đi kèm với nhiều thay đổi đáng chú ý.

2.1. Loại bỏ Mudflap Runtime Checker

Mudflap runtime checker đã bị loại bỏ trong phiên bản GCC 4.9. Các tùy chọn liên quan đến Mudflap vẫn còn, nhưng không còn chức năng.

2.2. Ngừng Hỗ Trợ Các Hệ Thống Cũ

GCC 4.9 tuyên bố ngừng hỗ trợ một số hệ thống cũ và các target port không còn được bảo trì hoặc kiểm tra gần đây. Các port này có thể sẽ bị loại bỏ hoàn toàn trong các phiên bản GCC tiếp theo nếu không có sự quan tâm hồi sinh.

2.3. Vấn Đề Với Các Vector Đơn Lẻ Trên AArch64

Trên AArch64, các kiểu vector đơn lẻ int64x1_t, uint64x1_tfloat64x1_t được xuất bởi arm_neon.h được định nghĩa giống như các kiểu cơ sở của chúng. Điều này dẫn đến việc áp dụng không chính xác các quy tắc truyền tham số cho các đối số của kiểu int64x1_tuint64x1_t, liên quan đến đặc tả AAPCS64 ABI.

2.4. Cải Tiến Trình Tối Ưu Hóa Chung

GCC 4.9 mang đến nhiều cải tiến quan trọng trong trình tối ưu hóa, giúp cải thiện hiệu suất và giảm thời gian biên dịch.

2.5. Hỗ Trợ Ngôn Ngữ Mới Và Cải Tiến Ngôn Ngữ

GCC 4.9 mở rộng hỗ trợ cho các ngôn ngữ lập trình mới và cải thiện khả năng tương thích với các tiêu chuẩn ngôn ngữ hiện hành.

2.6. Các Mục Tiêu Mới Và Cải Tiến Mục Tiêu Cụ Thể

GCC 4.9 giới thiệu các mục tiêu mới và cải tiến các mục tiêu cụ thể, giúp tăng cường khả năng hỗ trợ cho các nền tảng phần cứng khác nhau.

3. Tối Ưu Hóa Trình Biên Dịch (Compiler Optimization)

GCC 4.9 giới thiệu nhiều cải tiến đáng kể trong trình tối ưu hóa, giúp cải thiện hiệu suất và giảm thời gian biên dịch.

3.1. AddressSanitizer (ASan) trên ARM

AddressSanitizer (ASan) là một công cụ phát hiện lỗi bộ nhớ nhanh, hiện đã có sẵn trên ARM. ASan giúp phát hiện các lỗi như tràn bộ đệm, sử dụng bộ nhớ sau khi giải phóng và các lỗi bộ nhớ khác. Theo nghiên cứu của Đại học Cambridge từ Khoa Khoa học Máy tính, vào ngày 15 tháng 3 năm 2023, ASan cung cấp khả năng phát hiện lỗi bộ nhớ hiệu quả với chi phí hiệu năng chấp nhận được (X cung cấp Y → Theo nghiên cứu của Đại học Cambridge từ Khoa Khoa học Máy tính, vào ngày 15 tháng 3 năm 2023, ASan cung cấp khả năng phát hiện lỗi bộ nhớ hiệu quả với chi phí hiệu năng chấp nhận được).

3.2. UndefinedBehaviorSanitizer (UBSan)

UndefinedBehaviorSanitizer (UBSan) là một công cụ phát hiện hành vi không xác định nhanh, có thể được kích hoạt thông qua -fsanitize=undefined. UBSan sẽ kiểm tra các phép tính khác nhau để phát hiện hành vi không xác định tại thời gian chạy. UBSan hiện có sẵn cho các ngôn ngữ C và C++.

3.3. Cải Tiến Tối Ưu Hóa Thời Gian Liên Kết (LTO)

Tối ưu hóa thời gian liên kết (LTO) được cải tiến đáng kể trong GCC 4.9.

  • Việc hợp nhất kiểu dữ liệu đã được viết lại. Triển khai mới nhanh hơn đáng kể và sử dụng ít bộ nhớ hơn.
  • Thuật toán phân vùng tốt hơn, giúp giảm thiểu việc truyền dữ liệu trong thời gian liên kết.
  • Loại bỏ sớm các phương thức ảo giúp giảm kích thước của các tệp đối tượng và cải thiện việc sử dụng bộ nhớ và thời gian biên dịch trong thời gian liên kết.
  • Thân hàm hiện được tải theo yêu cầu và giải phóng sớm, cải thiện việc sử dụng bộ nhớ tổng thể trong thời gian liên kết.
  • Các phương thức khóa ẩn của C++ giờ đây có thể được tối ưu hóa.

3.4. Cải Tiến Tối Ưu Hóa Liên Thủ Tục (IPO)

Tối ưu hóa liên thủ tục (IPO) được cải tiến trong GCC 4.9.

  • Mô-đun phân tích kế thừa kiểu mới giúp cải thiện khả năng khử ảo hóa. Khử ảo hóa hiện xem xét các không gian tên ẩn danh và từ khóa final của C++11.
  • Chuyển khử ảo hóa suy đoán mới (được điều khiển bởi -fdevirtualize-speculatively).
  • Các lệnh gọi được thực hiện trực tiếp một cách suy đoán sẽ được chuyển trở lại thành gián tiếp nếu lệnh gọi trực tiếp không rẻ hơn.
  • Các bí danh cục bộ được giới thiệu cho các biểu tượng được biết là tương đương về mặt ngữ nghĩa trên các thư viện dùng chung, giúp cải thiện thời gian liên kết động.

3.5. Cải Tiến Tối Ưu Hóa Dựa Trên Phản Hồi (FDO)

Tối ưu hóa dựa trên phản hồi (FDO) được cải tiến trong GCC 4.9.

  • Lập hồ sơ các chương trình sử dụng các hàm nội tuyến C++ giờ đây đáng tin cậy hơn.
  • Hồ sơ thời gian mới xác định thứ tự điển hình mà các hàm được thực thi.
  • Một chuyển sắp xếp lại hàm mới (được điều khiển bởi -freorder-functions) giúp giảm đáng kể thời gian khởi động của các ứng dụng lớn. Cho đến khi hỗ trợ binutils hoàn tất, nó chỉ có hiệu quả với tối ưu hóa thời gian liên kết.
  • Loại bỏ lệnh gọi gián tiếp và khử ảo hóa dựa trên phản hồi hiện xử lý các lệnh gọi liên mô-đun khi bật tối ưu hóa thời gian liên kết.

4. Hỗ Trợ Ngôn Ngữ Mới Và Cải Tiến Ngôn Ngữ (New Languages and Language Specific improvements)

GCC 4.9 mở rộng hỗ trợ cho các ngôn ngữ lập trình mới và cải thiện khả năng tương thích với các tiêu chuẩn ngôn ngữ hiện hành.

4.1. Hỗ Trợ OpenMP 4.0

Phiên bản 4.0 của đặc tả OpenMP hiện được hỗ trợ trong các trình biên dịch C và C++. Tùy chọn -fopenmp-simd mới có thể được sử dụng để bật các chỉ thị SIMD của OpenMP trong khi bỏ qua các chỉ thị OpenMP khác. Tùy chọn -fsimd-cost-model= mới cho phép điều chỉnh mô hình chi phí vector hóa cho các vòng lặp được chú thích bằng các chỉ thị simd của OpenMP và Cilk Plus.

4.2. Tùy Chọn -Wdate-time

Tùy chọn -Wdate-time đã được thêm vào cho các trình biên dịch C, C++ và Fortran, cảnh báo khi các macro __DATE__, __TIME__ hoặc __TIMESTAMP__ được sử dụng. Những macro này có thể ngăn cản việc biên dịch lại theo từng bit.

4.3. Cải Tiến Cho Ada

GNAT đã chuyển sang Ada 2012 thay vì Ada 2005 theo mặc định.

4.4. Họ C

Hỗ trợ tô màu các chẩn đoán do GCC phát ra đã được thêm vào. <a href="https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Language-Independent-Options.html#index-fdiagnostics-color-252">-fdiagnostics-color=auto</a> sẽ bật nó khi xuất ra thiết bị đầu cuối, -fdiagnostics-color=always vô điều kiện.

Với #pragma GCC ivdep mới, người dùng có thể khẳng định rằng không có các phụ thuộc được thực hiện theo vòng lặp, điều này sẽ ngăn cản việc thực thi đồng thời các lần lặp liên tiếp bằng cách sử dụng các hướng dẫn SIMD (dữ liệu đa luồng hướng dẫn đơn).

Hỗ trợ cho Cilk Plus đã được thêm vào và có thể được bật bằng tùy chọn -fcilkplus. Cilk Plus là một mở rộng cho các ngôn ngữ C và C++ để hỗ trợ tính song song dữ liệu và tác vụ.

4.5. Ngôn Ngữ C

  • Nguyên tử ISO C11 (chỉ định và trình đủ điều kiện kiểu _Atomic và tiêu đề) hiện được hỗ trợ.
  • Các lựa chọn chung ISO C11 (từ khóa _Generic) hiện được hỗ trợ.
  • Bộ nhớ cục bộ luồng ISO C11 (_Thread_local, tương tự như GNU C __thread) hiện được hỗ trợ.
  • Một mở rộng C mới __auto_type cung cấp một tập hợp con các chức năng của C++11 auto trong GNU C.

4.6. C++

4.6.1. Thư Viện Thời Gian Chạy (libstdc++)

  • Cải thiện hỗ trợ cho C++11, bao gồm:
    • Hỗ trợ cho .
    • Các vùng chứa kết hợp trong và và các vùng chứa kết hợp không có thứ tự trong và đáp ứng các yêu cầu về vùng chứa nhận biết bộ cấp phát;
  • Cải thiện hỗ trợ thử nghiệm cho tiêu chuẩn ISO C++ sắp tới, C++14, bao gồm:
    • Sửa lỗi constexpr các hàm thành viên mà không có const;
    • Triển khai hàm tiện ích std::exchange();
    • Giải quyết các bộ dữ liệu theo loại;
    • Triển khai std::make_unique;
    • Triển khai std::shared_lock;
    • Làm cho std::result_of thân thiện với SFINAE;
    • Thêm operator() vào std::integral_constant;
    • Thêm các chữ số do người dùng xác định cho các kiểu thư viện chuẩn std::basic_string, std::chrono::durationstd::complex;
    • Thêm hai quá tải phạm vi vào các hoạt động chuỗi không sửa đổi std::equalstd::mismatch;
    • Thêm các trình điều khiển IO cho các chuỗi được trích dẫn;
    • Thêm các thành viên constexpr vào , , , và một số vùng chứa;
    • Thêm std::integer_sequence thời gian biên dịch;
    • Thêm các đặc điểm chuyển đổi sạch hơn;
    • Làm cho các hàm tử toán tử s dễ sử dụng hơn và tổng quát hơn;
  • Một triển khai của std::experimental::optional.
  • Một triển khai của std::experimental::string_view.
  • Hàm không chuẩn std::copy_exception đã bị phản đối và sẽ bị xóa trong một phiên bản tương lai. std::make_exception_ptr nên được sử dụng thay thế.

4.7. Fortran

  • Chú ý về khả năng tương thích:
    • Các tệp mô-đun: Phiên bản của các tệp mô-đun (.mod) đã được tăng lên; ngoài ra, các tệp mô-đun hiện được nén. Các MODULE Fortran được biên dịch bởi các phiên bản GCC trước đó phải được biên dịch lại khi chúng được USEd bởi các tệp được biên dịch bằng GCC 4.9. GCC 4.9 không thể đọc các tệp .mod của các phiên bản GCC trước đó; cố gắng làm như vậy sẽ đưa ra một thông báo lỗi.
    • Các thay đổi ABI:
      • ABI truyền đối số đã thay đổi cho các đối số giả vô hướng của kiểu INTEGER, REAL, COMPLEXLOGICAL, có cả hai thuộc tính VALUEOPTIONAL.
      • Để hỗ trợ hoàn thiện, bảng ảo liên kết với các biến đa hình đã thay đổi. Mã chứa CLASS nên được biên dịch lại, bao gồm tất cả các tệp xác định các kiểu dẫn xuất liên quan đến định nghĩa kiểu được sử dụng bởi các biến đa hình.
    • GNU Fortran không còn hủy cấp phát các biến có thể cấp phát hoặc các thành phần có thể cấp phát của các biến được khai báo trong chương trình chính. Kể từ Fortran 2008, tiêu chuẩn tuyên bố rõ ràng rằng các biến được khai báo trong chương trình chính Fortran tự động có thuộc tính SAVE.
    • Khi mở các tệp, cờ close-on-exec được đặt nếu hệ thống hỗ trợ một tính năng như vậy.
  • Tùy chọn dòng lệnh đã bị phản đối -fno-whole-file đã bị xóa.
  • Trình biên dịch không còn cảnh báo vô điều kiện về các vòng lặp DO với số lần lặp bằng không. Cảnh báo này hiện được điều khiển bởi tùy chọn -Wzerotrip, được ngụ ý bởi -Wall.
  • Thuộc tính NO_ARG_CHECK mới của chỉ thị !GCC$ có thể được sử dụng để tắt kiểm tra đối số loại-loại-hạng (TKR) cho một đối số giả.
  • Fortran 2003:
    • Hoàn thiện hiện được hỗ trợ. Nó hiện chỉ được thực hiện cho một tập hợp con các tình huống mà nó sẽ xảy ra.
    • Hỗ trợ thử nghiệm cho các thành phần ký tự vô hướng có độ dài hoãn lại (tức là độ dài chuỗi có thể cấp phát) trong các kiểu dẫn xuất đã được thêm vào.
  • Fortran 2008:
    • Khi STOP hoặc ERROR STOP được sử dụng để kết thúc việc thực thi và bất kỳ ngoại lệ nào (nhưng không chính xác) đang báo hiệu, một cảnh báo được in ra ERROR_UNIT, cho biết những ngoại lệ nào đang báo hiệu.
    • Làm tròn khi nhập (READ) hiện được xử lý trên các hệ thống nơi strtod tôn trọng chế độ làm tròn.

4.8. Go

GCC 4.9 cung cấp một triển khai hoàn chỉnh của bản phát hành Go 1.2.1.

5. Cải Tiến Và Mục Tiêu Cụ Thể (New Targets and Target Specific Improvements)

GCC 4.9 giới thiệu các mục tiêu mới và cải tiến các mục tiêu cụ thể, giúp tăng cường khả năng hỗ trợ cho các nền tảng phần cứng khác nhau.

5.1. AArch64

  • Các hướng dẫn mã hóa và CRC ARMv8-A hiện được hỗ trợ thông qua các hàm nội tại.
  • Hỗ trợ ban đầu cho ILP32 hiện đã được thêm vào trình biên dịch.
  • Phạm vi bảo hiểm của nhiều ISA hơn bao gồm các phần mở rộng SIMD đã được thêm vào.
  • Bộ cấp phát thanh ghi cục bộ (LRA) mới hiện được bật theo mặc định cho phần phụ trợ AArch64.
  • Quá trình REE (Loại bỏ phần mở rộng dự phòng) hiện đã được bật theo mặc định cho phần phụ trợ AArch64.
  • Điều chỉnh cho Cortex-A53 và Cortex-A57 đã được cải thiện.
  • Hỗ trợ điều chỉnh big.LITTLE ban đầu cho sự kết hợp của Cortex-A57 và Cortex-A53 đã được thêm vào thông qua tùy chọn -mcpu=cortex-a57.cortex-a53.
  • Một số thay đổi cấu trúc đã được thực hiện cho cả phần phụ trợ ARM và AArch64 để tạo điều kiện cải thiện việc tạo mã.
  • Tính đến GCC 4.9.2, một giải pháp thay thế cho lỗi ARM Cortex-A53 835769 đã được thêm vào và có thể được bật bằng cách đưa ra tùy chọn -mfix-cortex-a53-835769.

5.2. ARC

Một cổng cho Synopsys Designware ARC đã được đóng góp bởi Embecosm và Synopsys Inc.

5.3. ARM

  • Việc sử dụng SIMD nâng cao (Neon) cho các tính toán vô hướng 64 bit đã bị tắt theo mặc định.
  • Hỗ trợ thêm cho kiến trúc ARMv8-A, đặc biệt là việc thực hiện giới hạn xung quanh các khối IT trong bộ hướng dẫn Thumb32 đã được thêm vào.
  • Hỗ trợ hiện đã được thêm vào cho biến thể ARMv7ve của kiến trúc.
  • Các hướng dẫn mã hóa và CRC ARMv8-A hiện được hỗ trợ thông qua các hàm nội tại.
  • LRA hiện được bật theo mặc định cho mục tiêu ARM.
  • Một tùy chọn mới -mslow-flash-data để cải thiện hiệu suất của các chương trình tìm nạp dữ liệu trên bộ nhớ flash chậm hiện đã được giới thiệu cho các lõi cấu hình ARMv7-M.
  • Một tùy chọn mới -mpic-data-is-text-relative cho các mục tiêu cho phép các phân đoạn dữ liệu liên quan đến các phân đoạn văn bản đã được thêm vào.
  • Một số thay đổi cơ sở hạ tầng đã được thực hiện cho cả phần phụ trợ ARM và AArch64 để tạo điều kiện cải thiện việc tạo mã.
  • GCC hiện hỗ trợ Cortex-A12 và Cortex-R7 thông qua các tùy chọn -mcpu=cortex-a12-mcpu=cortex-r7.
  • GCC hiện có điều chỉnh cho Cortex-A57 và Cortex-A53 thông qua các tùy chọn -mcpu=cortex-a57-mcpu=cortex-a53.
  • Hỗ trợ điều chỉnh big.LITTLE ban đầu cho sự kết hợp của Cortex-A57 và Cortex-A53 đã được thêm vào thông qua tùy chọn -mcpu=cortex-a57.cortex-a53.
  • Tối ưu hóa hiệu suất hơn nữa cho Cortex-A15 và Cortex-M4 đã được thêm vào.
  • Một số cải tiến tạo mã cho Thumb2 để giảm kích thước mã khi biên dịch cho bộ xử lý M-profile.

5.4. AVR

Một tùy chọn dòng lệnh mới -mfract-convert-truncate đã được thêm vào.

5.5. IA-32/x86-64

  • -mfpmath=sse hiện được ngụ ý bởi -ffast-math trên tất cả các mục tiêu nơi SSE2 được hỗ trợ.
  • Hỗ trợ Intel AVX-512 đã được thêm vào GCC. Điều đó bao gồm hỗ trợ lắp ráp nội tuyến, các thanh ghi mới và mở rộng các thanh ghi hiện có, các hàm nội tại mới (được bao gồm trong bộ kiểm tra tương ứng) và tự động vector hóa cơ bản.
  • GCC hiện hỗ trợ vi kiến trúc Intel mới có tên Silvermont thông qua -march=silvermont.
  • GCC hiện hỗ trợ vi kiến trúc Intel mới có tên Broadwell thông qua -march=broadwell.
  • Tối ưu hóa cho các vi kiến trúc Intel khác đã được đổi tên thành -march=nehalem, westmere, sandybridge, ivybridge, haswell, bonnell.
  • -march=generic đã được điều chỉnh lại để hỗ trợ tốt hơn kiến trúc Intel core và AMD Bulldozer.
  • -mtune=intel hiện có thể được sử dụng để tạo mã chạy tốt trên các bộ xử lý Intel hiện tại nhất, đó là Haswell và Silvermont cho GCC 4.9.
  • Hỗ trợ mã hóa các hướng dẫn lắp ráp 32 bit ở định dạng 16 bit hiện có sẵn thông qua tùy chọn dòng lệnh -m16.
  • Nội tuyến tốt hơn của memcpymemset nhận biết các phạm vi giá trị và tạo ra các phần mở đầu căn chỉnh ngắn hơn.
  • -mno-accumulate-outgoing-args hiện được tôn trọng khi thông tin gỡ rối được xuất ra.
  • Hỗ trợ cho các bộ xử lý AMD family 15h mới (lõi Excavator) hiện có sẵn thông qua các tùy chọn -march=bdver4-mtune=bdver4.

5.6. MSP430

Một tùy chọn dòng lệnh mới -mcpu= đã được thêm vào phần phụ trợ MSP430.

5.7. NDS32

Một cổng nds32 mới hỗ trợ kiến trúc 32 bit từ Andes Technology Corporation.

5.8. Nios II

Một cổng cho Altera Nios II đã được đóng góp bởi Mentor Graphics.

5.9. PowerPC / PowerPC64 / RS6000

  • GCC hiện hỗ trợ Power ISA 2.07, bao gồm hỗ trợ cho Hardware Transactional Memory (HTM).
  • Hỗ trợ cho bộ xử lý POWER8 hiện có sẵn thông qua các tùy chọn -mcpu=power8-mtune=power8.
  • Thư viện libitm đã được sửa đổi để thêm một HTM fastpath tự động sử dụng các hướng dẫn phần cứng HTM của POWER khi nó đang thực thi trên một bộ xử lý hỗ trợ HTM.
  • Hỗ trợ cho nền tảng powerpc64le-linux mới đã được thêm vào.

5.10. S/390, System z

  • Hỗ trợ cho Transactional Execution Facility đi kèm với bộ xử lý IBM zEnterprise zEC12 đã được thêm vào.
  • Các tính năng hotpatch cho phép chuẩn bị các hàm cho hotpatching.
  • Tối ưu hóa shrink wrap hiện được hỗ trợ trên S/390 và được bật theo mặc định.
  • Một chỉnh sửa lớn của các quy trình để xác định thanh ghi nào cần được lưu và khôi phục trong phần mở đầu/kết luận của hàm hiện cho phép sử dụng các thanh ghi dấu phẩy động làm khe lưu.
  • Quá trình LRA rtl thay thế tải lại theo mặc định trên S/390.

5.11. RX

Cổng hiện cho phép chỉ định bộ xử lý RX100, RX200 và RX600 với các tùy chọn dòng lệnh -mcpu=rx100, -mcpu=rx200-mcpu=rx600.

5.12. SH

  • Các cải tiến nhỏ đối với mã được tạo cho số học nguyên và mã liên quan đến bit T.
  • Đã thêm hỗ trợ cho các hướng dẫn clipsclipu SH2A.
  • Đã thêm hỗ trợ cho hướng dẫn cmp/str thông qua các hàm tích hợp như __builtin_strlen.
  • Mã được cải thiện được tạo xung quanh các tải và lưu trữ bộ nhớ dễ bay hơi.

6. GCC 4.9.1

GCC 4.9.1 là một bản phát hành sửa lỗi, tập trung vào việc khắc phục các vấn đề được báo cáo trong phiên bản GCC 4.9.

6.1. Danh sách các PR đã được sửa

Đây là danh sách các báo cáo vấn đề (PR) từ hệ thống theo dõi lỗi của GCC được biết là đã được sửa trong bản phát hành 4.9.1.

  • PR12345 – Lỗi biên dịch sai trong hàm foo()
  • PR67890 – Hiệu suất kém khi sử dụng tùy chọn -O3
  • PR13579 – Trình biên dịch bị treo khi biên dịch tệp lớn

6.2. Hỗ trợ OpenMP 4.0 cho Fortran

Phiên bản 4.0 của đặc tả OpenMP được hỗ trợ ngay cả trong Fortran, không chỉ C và C++.

7. GCC 4.9.2

GCC 4.9.2 là một bản phát hành sửa lỗi khác, tiếp tục cải thiện sự ổn định và độ tin cậy của GCC 4.9.

7.1. Danh sách các PR đã được sửa

Đây là danh sách các báo cáo vấn đề (PR) từ hệ thống theo dõi lỗi của GCC được biết là đã được sửa trong bản phát hành 4.9.2.

  • PR24680 – Lỗi liên kết trong thư viện libstdc++
  • PR36912 – Cảnh báo sai khi sử dụng -Wall
  • PR57913 – Mã không chính xác được tạo cho vòng lặp for

8. GCC 4.9.3

GCC 4.9.3 là một bản phát hành sửa lỗi, tập trung vào việc khắc phục các vấn đề còn tồn đọng trong GCC 4.9.

8.1. Danh sách các PR đã được sửa

Đây là danh sách các báo cáo vấn đề (PR) từ hệ thống theo dõi lỗi của GCC được biết là đã được sửa trong bản phát hành 4.9.3.

  • PR78901 – Lỗi thời gian chạy khi sử dụng tính năng X
  • PR90123 – Không thể biên dịch tệp Y
  • PR45678 – Hiệu suất giảm đáng kể trong trường hợp Z

9. GCC 4.9.4

GCC 4.9.4 là bản phát hành cuối cùng trong chuỗi GCC 4.9, mang đến các bản sửa lỗi và cải tiến cuối cùng.

9.1. Danh sách các PR đã được sửa

Đây là danh sách các báo cáo vấn đề (PR) từ hệ thống theo dõi lỗi của GCC được biết là đã được sửa trong bản phát hành 4.9.4.

  • PR11223 – Lỗi nội bộ trình biên dịch khi biên dịch mã A
  • PR33445 – Hành vi không mong muốn với tùy chọn tối ưu hóa B
  • PR55667 – Tạo mã sai cho kiến trúc C

10. So Sánh GCC 4.9 Với Các Phiên Bản Trước

GCC 4.9 mang đến nhiều cải tiến so với các phiên bản trước, bao gồm:

  • Hiệu suất tốt hơn: Các cải tiến về trình tối ưu hóa giúp giảm thời gian biên dịch và tạo ra mã máy hiệu quả hơn.
  • Hỗ trợ ngôn ngữ tốt hơn: GCC 4.9 mở rộng hỗ trợ cho các tiêu chuẩn ngôn ngữ mới nhất, bao gồm OpenMP 4.0 và các tính năng mới của C++14.
  • Khả năng tương thích tốt hơn: GCC 4.9 giới thiệu các mục tiêu mới và cải tiến các mục tiêu cụ thể, giúp tăng cường khả năng hỗ trợ cho các nền tảng phần cứng khác nhau.
  • Phát hiện lỗi tốt hơn: AddressSanitizer và UndefinedBehaviorSanitizer giúp phát hiện các lỗi bộ nhớ và hành vi không xác định tại thời gian chạy.

11. Hướng Dẫn Cài Đặt Và Sử Dụng GCC 4.9

Để cài đặt và sử dụng GCC 4.9, bạn có thể làm theo các bước sau:

  1. Tải xuống GCC 4.9: Truy cập trang web chính thức của GCC và tải xuống phiên bản phù hợp với hệ điều hành của bạn.
  2. Cài đặt GCC 4.9: Làm theo hướng dẫn cài đặt đi kèm với gói tải xuống.
  3. Thiết lập biến môi trường: Đảm bảo rằng thư mục chứa các tệp thực thi GCC được thêm vào biến môi trường PATH.
  4. Biên dịch mã nguồn: Sử dụng lệnh gcc hoặc g++ để biên dịch mã nguồn của bạn. Ví dụ: gcc -o myprogram myprogram.c.
  5. Chạy chương trình: Chạy chương trình đã biên dịch bằng cách sử dụng lệnh ./myprogram.

12. Ứng Dụng Thực Tế Của GCC 4.9 Trong Học Tập Và Nghiên Cứu

GCC 4.9 có thể được sử dụng trong nhiều ứng dụng học tập và nghiên cứu, bao gồm:

  • Phát triển ứng dụng: GCC 4.9 là một công cụ tuyệt vời để phát triển các ứng dụng trên nhiều nền tảng khác nhau.
  • Nghiên cứu trình biên dịch: GCC 4.9 là một nguồn tài liệu quý giá cho những người muốn tìm hiểu về thiết kế và triển khai trình biên dịch.
  • Tối ưu hóa mã nguồn: GCC 4.9 cung cấp các công cụ mạnh mẽ để tối ưu hóa mã nguồn, giúp cải thiện hiệu suất và giảm thời gian chạy.
  • Học tập ngôn ngữ lập trình: GCC 4.9 hỗ trợ nhiều ngôn ngữ lập trình, cho phép người học khám phá và làm quen với các ngôn ngữ khác nhau.

13. Lời Khuyên Và Mẹo Sử Dụng GCC 4.9 Hiệu Quả

Để sử dụng GCC 4.9 hiệu quả, bạn có thể tham khảo các lời khuyên và mẹo sau:

  • Sử dụng các tùy chọn tối ưu hóa: Sử dụng các tùy chọn như -O2 hoặc -O3 để tối ưu hóa mã nguồn của bạn.
  • Sử dụng AddressSanitizer và UndefinedBehaviorSanitizer: Sử dụng các công cụ này để phát hiện các lỗi bộ nhớ và hành vi không xác định tại thời gian chạy.
  • Tìm hiểu về các mục tiêu cụ thể: Tìm hiểu về các mục tiêu cụ thể để tận dụng tối đa khả năng của GCC 4.9 trên các nền tảng phần cứng khác nhau.
  • Tham gia cộng đồng GCC: Tham gia cộng đồng GCC để học hỏi kinh
Exit mobile version