จะเข้าไปทำไม size_tต้องมีอยู่และวิธีที่เรามาที่นี่:
ในแง่ปฏิบัติsize_tและptrdiff_tรับประกันว่าจะมีความกว้าง 64 บิตในการใช้งานแบบ 64 บิต, 32 บิตในการใช้งานแบบ 32 บิตและอื่น ๆ พวกเขาไม่สามารถบังคับประเภทที่มีอยู่ให้หมายความว่าในคอมไพเลอร์ทุกตัวโดยไม่ทำลายรหัสดั้งเดิม
size_tหรือptrdiff_tไม่จำเป็นต้องเหมือนกับหรือintptr_t uintptr_tพวกเขาแตกต่างกันไปตามสถาปัตยกรรมบางประเภทที่ยังคงใช้งานอยู่เมื่อsize_tและptrdiff_tถูกเพิ่มลงในมาตรฐานในช่วงปลายยุค 80 และล้าสมัยเมื่อ C99 ได้เพิ่มประเภทใหม่จำนวนมาก แต่ยังไม่ได้หายไป (เช่น Windows 16 บิต) x86 ในโหมดการป้องกันแบบ 16 บิตมีหน่วยความจำแบบแบ่งส่วนซึ่งอาร์เรย์หรือโครงสร้างที่ใหญ่ที่สุดที่เป็นไปได้อาจมีขนาดเพียง 65,536 ไบต์ แต่farตัวชี้จำเป็นต้องมีความกว้าง 32 บิตซึ่งกว้างกว่ารีจิสเตอร์ ในนั้นintptr_tจะได้รับ 32 บิตกว้าง แต่size_tและptrdiff_tอาจมีขนาด 16 บิตและพอดีกับการลงทะเบียน และใครจะรู้ว่าระบบปฏิบัติการแบบไหนที่จะถูกเขียนในอนาคต ในทางทฤษฎีแล้วสถาปัตยกรรม i386 เสนอรูปแบบการแบ่งเซ็กเมนต์ 32 บิตพร้อมพอยน์เตอร์ 48 บิตที่ไม่เคยใช้ระบบปฏิบัติการมาก่อน
ประเภทของออฟเซ็ตหน่วยความจำอาจไม่เป็นlongเพราะรหัสดั้งเดิมมากเกินไปถือว่าlongมีความกว้าง 32 บิต สมมติฐานนี้ถูกสร้างขึ้นใน UNIX และ Windows APIs น่าเสียดายที่รหัสมรดกอื่น ๆ จำนวนมากยังสันนิษฐานว่า a longนั้นกว้างพอที่จะถือพอยน์เตอร์ออฟเซ็ตไฟล์จำนวนวินาทีที่ผ่านไปตั้งแต่ปี 1970 เป็นต้นไป ตอนนี้ POSIX จัดเตรียมวิธีที่เป็นมาตรฐานในการบังคับให้การสันนิษฐานหลังเป็นจริงแทนที่จะเป็นแบบดั้งเดิม แต่ก็ไม่ใช่การสันนิษฐานแบบพกพา
อาจเป็นintเพราะคอมไพเลอร์เพียงเล็กน้อยเท่านั้นในยุค 90 ที่มีintความกว้าง 64 บิต จากนั้นพวกเขาก็ประหลาดจริง ๆ ด้วยการรักษาlongความกว้าง 32 บิต การแก้ไขมาตรฐานครั้งต่อไปประกาศว่าเป็นการผิดกฎหมายintที่จะกว้างกว่าlongแต่intยังคงกว้าง 32 บิตในระบบ 64 บิตส่วนใหญ่
ไม่สามารถทำได้long long intซึ่งเพิ่มเข้ามาในภายหลังเนื่องจากถูกสร้างให้มีความกว้างอย่างน้อย 64 บิตแม้ในระบบ 32 บิต
ดังนั้นจำเป็นต้องมีรูปแบบใหม่ แม้ว่าจะไม่ใช่ประเภทอื่นทั้งหมดนั้นก็มีความหมายอย่างอื่นที่ไม่ใช่ออฟเซ็ตภายในอาร์เรย์หรือวัตถุ และถ้ามีบทเรียนหนึ่งจากความล้มเหลวของการโยกย้ายแบบ 32-64- บิตมันจะต้องเจาะจงเกี่ยวกับคุณสมบัติของประเภทที่จำเป็นต้องมีและไม่ใช้อย่างใดอย่างหนึ่งที่หมายถึงสิ่งที่แตกต่างกันในโปรแกรมที่แตกต่างกัน
intหากsome_sizeลงชื่อsize_tถ้ายังไม่ได้ลงนาม