มาโครที่รู้จักกันในชื่อlikely
และunlikely
มาโครช่วยให้คอมไพเลอร์ทราบว่าif
จะป้อนหรือข้าม การใช้มันจะส่งผลในการปรับปรุงประสิทธิภาพ (ค่อนข้างเล็กน้อย)
ฉันเริ่มใช้มันเมื่อไม่นานมานี้และฉันไม่แน่ใจว่าควรใช้คำใบ้ดังกล่าวบ่อยเพียงใด ฉันกำลังใช้กับการตรวจสอบข้อผิดพลาดif
s unlikely
ซึ่งมักจะถูกทำเครื่องหมายเป็น ตัวอย่างเช่น:
mem = malloc(size);
if (unlikely(mem == NULL))
goto exit_no_mem;
ดูเหมือนว่าจะใช้ได้ แต่การตรวจสอบข้อผิดพลาดif
เกิดขึ้นบ่อยครั้งดังนั้นจึงใช้มาโครดังกล่าว
คำถามของฉันคือมันมีมากเกินไปlikely
และunlikely
แมโครในทุกการตรวจสอบข้อผิดพลาดif
?
ในขณะที่เราอยู่ที่นี่พวกเขามักจะใช้ที่อื่นที่ไหน?
ในการใช้งานปัจจุบันของฉันมันอยู่ในไลบรารีที่ทำให้เกิดนามธรรมจากระบบย่อยเรียลไทม์ดังนั้นโปรแกรมจะกลายเป็นแบบพกพาระหว่าง RTAI, QNX และอื่น ๆ ที่กล่าวว่าฟังก์ชั่นส่วนใหญ่ค่อนข้างเล็กและเรียกฟังก์ชั่นอื่น ๆ หนึ่งหรือสองโดยตรง หลายคนมีstatic inline
ฟังก์ชั่น
อย่างแรกเลยไม่ใช่แอพพลิเคชั่นที่ฉันสามารถโพรไฟล์ได้ มันไม่มีเหตุผลที่จะ "ระบุคอขวด" เนื่องจากเป็นห้องสมุดไม่ใช่แอปพลิเคชันแบบสแตนด์อโลน
ประการที่สองมันคล้ายกับ "ฉันรู้ว่ามันไม่น่าเป็นไปได้ฉันก็จะบอกให้คอมไพเลอร์" if
ฉันไม่แข็งขันพยายามที่จะเพิ่มประสิทธิภาพ
likely
และunlikely
มีอยู่และสิ่งที่พวกเขาทำ ฉันไม่พบสิ่งใดที่จะแนะนำให้ใช้เมื่อไรและที่ไหนดีที่สุด