10
มาโครที่น่าจะเป็น / ไม่น่าจะทำงานในเคอร์เนล Linux ได้อย่างไรและประโยชน์ของมันคืออะไร?
ฉันขุดผ่านบางส่วนของเคอร์เนล Linux และพบสายเช่นนี้: if (unlikely(fd < 0)) { /* Do something */ } หรือ if (likely(!err)) { /* Do something */ } ฉันได้พบคำจำกัดความของพวกเขา: #define likely(x) __builtin_expect((x),1) #define unlikely(x) __builtin_expect((x),0) ฉันรู้ว่ามีไว้สำหรับการปรับให้เหมาะสม แต่จะทำงานอย่างไร และสามารถลดขนาดประสิทธิภาพ / ขนาดได้เท่าไรจากการใช้งาน? และมันก็คุ้มค่ากับความยุ่งยาก (และการสูญเสียความสามารถในการพกพา) อย่างน้อยในโค้ดคอขวด (ใน userspace แน่นอน)