หลังจากหนึ่งปีของการพัฒนา GCC 11.1 ชุดคอมไพเลอร์เวอร์ชันใหม่เปิดตัวซึ่งเป็นรุ่นสำคัญครั้งแรกในสาขา GCC 11.x ใหม่ ภายใต้รูปแบบการกำหนดหมายเลขเวอร์ชันใหม่เวอร์ชัน 11.0 ถูกใช้ในระหว่างการพัฒนาและไม่นานก่อนการเปิดตัว GCC 11.1 สาขาของ GCC 12.0 ได้ถูกแยกออกมาเพื่อสร้าง GCC 12.1 เวอร์ชันหลักถัดไป
GCC 11.1 โดดเด่นในเรื่องการเปลี่ยนไปใช้รูปแบบไฟล์ดีบักเริ่มต้น DWARF 5, การรวมค่าเริ่มต้นของมาตรฐาน C ++ 17 ("-std = gnu ++ 17"), การปรับปรุงที่สำคัญในความเข้ากันได้กับมาตรฐาน C ++ 20, การสนับสนุนการทดลองสำหรับ C ++ 23, การปรับปรุงที่เกี่ยวข้องกับมาตรฐานในอนาคตของ ภาษาซี (C2x) การเพิ่มประสิทธิภาพใหม่
GCC 11.1 คุณสมบัติใหม่หลัก
โหมดเริ่มต้นสำหรับภาษา C ++ เปลี่ยนไปใช้มาตรฐาน C ++ 17แทนที่จะเป็น C ++ 14 ที่เสนอไว้ก่อนหน้านี้ เป็นไปได้ที่จะเลือกปิดใช้งานลักษณะการทำงาน C ++ 17 ใหม่เมื่อประมวลผลเทมเพลตที่ใช้เทมเพลตอื่นเป็นพารามิเตอร์ (-fno-new-ttp-matching)
เพิ่มการรองรับสำหรับการเร่งฮาร์ดแวร์ ของเครื่องมือ AddressSanitizer ซึ่งช่วยให้คุณสามารถระบุข้อเท็จจริงของการเข้าถึงพื้นที่หน่วยความจำที่ว่างเกินขีด จำกัด ของบัฟเฟอร์ที่จัดสรรไว้และข้อผิดพลาดอื่น ๆ บางประเภทเมื่อทำงานกับหน่วยความจำ ปัจจุบันการเร่งความเร็วของฮาร์ดแวร์มีให้ใช้งานสำหรับสถาปัตยกรรม AArch64 เท่านั้นและมุ่งเน้นไปที่การใช้งานเมื่อคอมไพล์เคอร์เนล Linux
ความแปลกใหม่อีกอย่างที่นำเสนอคือ การเพิ่มประสิทธิภาพและการปรับปรุงระหว่างโพรซีเดอร์เนื่องจากมีการเพิ่ม IPA-modref pass ใหม่ (-fipa-modref) เพื่อติดตามผลข้างเคียงในการเรียกใช้ฟังก์ชันและปรับปรุงความแม่นยำในการวิเคราะห์ นอกจากนี้ยังมี ปรับปรุงการนำ IPA-ICF pass มาใช้ (-fipa-icf) ซึ่งช่วยลดการใช้หน่วยความจำคอมไพล์และเพิ่มจำนวนฟังก์ชันรวมที่รวมบล็อกโค้ดที่เหมือนกัน
El เครื่องมือเพิ่มประสิทธิภาพที่ขับเคลื่อนด้วยโปรไฟล์ (ป.ป.ช.) ปรับปรุงโหมด "-fprofile-values" โดยการติดตามพารามิเตอร์เพิ่มเติมสำหรับการโทรทางอ้อม
ด้วย การใช้งานมาตรฐาน OpenMP 5.0 อย่างต่อเนื่องจะเน้น (Open Multi-Processing) ซึ่ง เพิ่มการสนับสนุนเบื้องต้นสำหรับคำสั่งการมอบหมายงานและความสามารถในการใช้ลูปที่ไม่สม่ำเสมอ ใน OpenMP builds ขณะนี้รองรับตัวแปรสภาพแวดล้อม OMP_TARGET_OFFLOAD แล้ว
การปรับใช้ข้อกำหนดการเขียนโปรแกรมแบบขนาน OpenACC 2.6 ที่จัดเตรียมไว้สำหรับภาษา C, C ++ และ Fortran ซึ่งกำหนดเครื่องมือสำหรับการถ่ายโอนการดำเนินการไปยัง GPU และโปรเซสเซอร์พิเศษเช่น NVIDIA PTX ได้รับการปรับปรุง
สำหรับภาษาของตระกูล C มีการใช้แอตทริบิวต์ใหม่ "no_stack_protector" ออกแบบมาเพื่อทำเครื่องหมายฟังก์ชันที่ไม่ควรเปิดใช้งานการป้องกันสแต็ก ("-fstack-protector") แอตทริบิวต์ "malloc" ได้รับการขยายโดยรองรับการระบุคู่การโทรเพื่อจัดสรรและเพิ่มหน่วยความจำซึ่งใช้ในตัวแยกวิเคราะห์แบบคงที่เพื่อตรวจจับข้อผิดพลาดของหน่วยความจำโดยทั่วไป (การรั่วไหลของหน่วยความจำการใช้งานหลังจากว่างการเรียกใช้ฟังก์ชันฟรีสองครั้งเป็นต้น) และคำเตือนของคอมไพเลอร์ "-Wmismatched-dealloc", "-Wmismatched- new-delete" และ " -Wfree-nonheap-object "รายงานการดำเนินการ deallocation และ deallocation ที่ไม่สอดคล้องกัน
เมื่อสร้างข้อมูลการดีบักรูปแบบ DWARF 5 จะถูกใช้โดยค่าเริ่มต้นซึ่งเมื่อเทียบกับเวอร์ชันก่อนหน้านี้ทำให้สามารถสร้างข้อมูลการดีบักที่มีขนาดกะทัดรัดขึ้น 25% การสนับสนุน DWARF 5 เต็มรูปแบบต้องใช้ binutils อย่างน้อยเวอร์ชัน 2.35.2
ความสามารถของโหมด ThreadSanitizer ที่ปรับปรุงแล้ว (-fsanitize = thread) เนื่องจากใช่e เพิ่มการรองรับสำหรับ runtimes และสภาพแวดล้อมทางเลือก ตลอดจนการสนับสนุนเครื่องมือดีบัก Kernel Concurrency Sanitizer (KCSAN) เพื่อตรวจจับสภาวะการแข่งขันภายในเคอร์เนล Linux แบบไดนามิก เพิ่มตัวเลือกใหม่ "–param tsan-different-volatile" และ "–param tsan-instrument-func-entry-exit"
vectorizer จัดเตรียมการบัญชีของเนื้อหาทั้งหมดของฟังก์ชันและการประมวลผลเพิ่มเติมของความสามารถที่เกี่ยวข้องกับทางแยกและการอ้างอิงไปยังบล็อกก่อนหน้าในผังงานควบคุม (CFG)
เครื่องมือเพิ่มประสิทธิภาพมีความสามารถในการแปลงชุดของการดำเนินการตามเงื่อนไขเป็นนิพจน์การเปลี่ยนแปลงซึ่งจะเปรียบเทียบตัวแปรเดียวกัน ในอนาคตนิพจน์การเปลี่ยนแปลงสามารถเข้ารหัสได้โดยใช้คำแนะนำในการทดสอบบิต (เพื่อควบคุมการแปลงนี้ได้เพิ่มตัวเลือก "-fbit-testing")
สำหรับ C ++ ส่วนหนึ่งของการเปลี่ยนแปลงและนวัตกรรมที่เสนอในมาตรฐาน C ++ 20 ได้ถูกนำไปใช้รวมถึงฟังก์ชันเสมือน "consteval virtual" ตัวทำลายหลอกสำหรับการยุติวงจรชีวิตของวัตถุโดยใช้คลาส enum และการคำนวณ ขนาดของอาร์เรย์ในนิพจน์ "ใหม่"
หากคุณต้องการทราบข้อมูลเพิ่มเติมคุณสามารถตรวจสอบรายละเอียดได้ใน ลิงค์ต่อไปนี้