Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

ตัวแปรสแตติกถูกจัดเก็บใน C/C++ ที่ไหน


ตัวแปรแบบคงที่คือตัวแปรที่ยังคงอยู่ในหน่วยความจำในขณะที่โปรแกรมกำลังทำงาน กล่าวคือ อายุการใช้งานของตัวแปรคือตลอดระยะเวลาที่โปรแกรมทำงาน ซึ่งแตกต่างจากตัวแปรอัตโนมัติเนื่องจากจะคงอยู่ในหน่วยความจำเฉพาะเมื่อฟังก์ชันกำลังทำงานและจะถูกทำลายเมื่อฟังก์ชันสิ้นสุด

ตัวแปรสแตติกถูกเก็บไว้ในส่วนข้อมูลของหน่วยความจำ ส่วนข้อมูลเป็นส่วนหนึ่งของพื้นที่ที่อยู่เสมือนของโปรแกรม

ตัวแปรสแตติกทั้งหมดที่ไม่มีการเริ่มต้นอย่างชัดเจนหรือถูกเตรียมข้อมูลเบื้องต้นให้เป็นศูนย์จะถูกเก็บไว้ในเซ็กเมนต์ข้อมูลที่ยังไม่ได้กำหนดค่าเริ่มต้น (หรือที่เรียกว่าเซ็กเมนต์ BSS) เมื่อเทียบกับสิ่งนี้ ตัวแปรสแตติกที่เตรียมใช้งานจะถูกจัดเก็บไว้ในส่วนข้อมูลที่เริ่มต้น

ยกตัวอย่างดังนี้ −

static int x = 5;
static int y;

The static variable x is stored in the initialized data segment and the static variable y is stored in the BSS segment.

โปรแกรมที่แสดงตัวแปรคงที่ในภาษา C มีดังต่อไปนี้ -

ตัวอย่าง

#include<stdio.h>
int func(){
   static int i = 4 ;
   i++;
   return i;
}

int main(){
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());

   return 0;
}

ผลลัพธ์ของโปรแกรมข้างต้นเป็นดังนี้ −

5
6
7
8
9
10

ตอนนี้เรามาทำความเข้าใจโปรแกรมข้างต้นกัน

ในฟังก์ชัน func() i เป็นตัวแปรสแตติกที่กำหนดค่าเริ่มต้นเป็น 4 ดังนั้นมันจึงถูกจัดเก็บไว้ในกลุ่มข้อมูลที่เริ่มต้น จากนั้น i จะเพิ่มขึ้นและค่าของมันจะถูกส่งกลับ ข้อมูลโค้ดที่แสดงสิ่งนี้มีดังนี้ -

int func(){
   static int i = 4 ;
   i++;
   return i;
}

ในฟังก์ชัน main() ฟังก์ชัน func() จะถูกเรียก 6 ครั้ง และคืนค่า i ที่พิมพ์ออกมา เนื่องจาก i เป็นตัวแปรสแตติก มันจึงยังคงอยู่ในหน่วยความจำในขณะที่โปรแกรมกำลังทำงานและให้ค่าที่สม่ำเสมอ ข้อมูลโค้ดที่แสดงสิ่งนี้มีดังนี้ -

printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());