int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
stacksize
แอตทริบิวต์จะกำหนดขนาดต่ำสุดสแต็ค (ไบต์) จัดสรรสำหรับสร้างหัวข้อสแต็ค
ในตัวอย่างของคุณขนาดสแต็กถูกตั้งค่าเป็น 8388608 ไบต์ซึ่งสอดคล้องกับ 8MB ตามที่ส่งคืนโดยคำสั่งulimit -s
ดังนั้นจึงตรงกับ
จากpthread_create()
คำอธิบาย:
บนลินุกซ์ / x86-32ขนาดสแต็คเริ่มต้นสำหรับหัวข้อใหม่คือ2 เมกะไบต์ ภายใต้การนำไปใช้การเธรด NPTL ถ้า
ขีด จำกัด ซอฟต์รีซอร์สRLIMIT_STACKณ เวลาที่โปรแกรมเริ่มทำงานมีค่าอื่นนอกเหนือจาก "unlimited" ดังนั้นจะกำหนดขนาดสแต็กเริ่มต้นของเธรดใหม่ การใช้pthread_attr_setstacksize (3) แอ็ตทริบิวต์ขนาดสแต็กสามารถตั้งค่าได้อย่างชัดเจนในอาร์กิวเมนต์ attr ที่ใช้เพื่อสร้างเธรดเพื่อรับขนาดสแต็กอื่นที่ไม่ใช่ค่าดีฟอลต์
ดังนั้นขนาดด้ายสแต็กสามารถตั้งค่าได้ผ่านฟังก์ชั่นการตั้งค่าด้านบนหรือulimit
คุณสมบัติของระบบ สำหรับ 16k ที่คุณอ้างถึงยังไม่ชัดเจนว่าแพลตฟอร์มใดที่คุณเคยเห็นและ / หรือหากมีการตั้งค่าขีด จำกัด ของระบบสำหรับสิ่งนี้
ดูหน้า pthread_createและที่นี่สำหรับตัวอย่างที่น่าสนใจเกี่ยวกับเรื่องนี้
8388608 / 1024 = 8192
ผมคิดว่า