Sobes.tech
Junior

როდის და რამდენ ხანს არსებობს გლობალური და ადგილობრივი ცვლადები C++-ში?

sobes.tech AI

პასუხი AI-სგან

გლობალური ცვლადები

  • არსებობის დრო: პროგრამის დაწყებიდან დასრულებამდე.
  • საწყობი ადგილი: ჩვეულებრივ სტატიკურ მეხსიერებაში (.data ან .bss სექციაში შესრულებადი ფაილის).
  • ინიციალიზაცია:
    • არასტატიკური გლობალური ცვლადები, რომლებიც განსაზღვრულია ფაილზე, და ტრივიული კონსტრუქტორებით, ინიცირებულია main()-ის გამოძახებამდე.
    • ნულოვანი ინიციალიზაციის გლობალური ცვლადები (მაგალითად, int i = 0;) ასევე ინიცირებულია main()-ის წინ.
    • ცვლადები, განსაზღვრული const-ით ან სტატიკური ხანგრძლივობის მქონე, ინიცირებულია პროგრამის ჩატვირთვისას.
  • ხელმისაწვდომობა: ჩანს ყველა ფუნქციაში, სადაც მასზეა მითითებული სქოპი.

ადგილობრივი ცვლადები

  • არსებობის დრო: ცვლადის განსაზღვრის ადგილიდან (ფუნქცია, ციკლი, პირობის ოპერატორი და ა.შ.) ამ ბლოკიდან გამოსვლის დროამდე.
  • საწყობი ადგილი: ჩვეულებრივ სტეკზე (ავტომატური ცვლადებისთვის). სტატიკური ადგილობრივი ცვლადები ინახება სტატიკურ მეხსიერებაში.
  • ინიციალიზაცია:
    • ავტომატური ადგილობრივი ცვლადები არ ინიცირებულია ავტომატურად (მოსალოდნელია "მტვერი"). საჭიროებს გამოხატულ ინიციალიზაციას.
    • სტატიკური ადგილობრივი ცვლადები ინიცირებულია ერთხელ, მათი განსაზღვრის პირველ მიღწევაზე.
  • ხელმისაწვდომობა: მხოლოდ იმ ბლოკშია, სადაც განსაზღვრულია.

მაგალითები

// გლობალური ცვლადი
int global_variable = 10;

void some_function() {
    // ადგილობრივი ცვლადი (ავტომატური)
    int local_variable_1; // არინიცირებულია

    // ადგილობრივი ცვლადი (ავტომატური) ინიციალიზაციით
    int local_variable_2 = 20;

    // სტატიკური ადგილობრივი ცვლადი
    static int static_local_variable = 30; // ინიცირებულია ერთხელ

    // გლობალური ცვლადის წვდომა
    global_variable++;

    // ადგილობრივი ცვლადების წვდომა
    local_variable_1 = global_variable;
    static_local_variable++;

    // some_function()-დან გამოსვლის შემდეგ, local_variable_1 და local_variable_2 აღარ არსებობს
    // static_local_variable აგრძელებს არსებობას და ინარჩუნებს თავის მნიშვნელობას
}

int main() {
    some_function();
    some_function(); // static_local_variable ინარჩუნებს თავის მნიშვნელობას
    // გლობალური ცვლადი აქ ხელმისაწვდომია
    // local_variable_1 და local_variable_2 აქ აღარ არის ხელმისაწვდომი

    return 0;
}

შედარების სია

მახასიათებელი გლობალური ცვლადები ადგილობრივი ცვლადები (ავტომატური) სტატიკური ადგილობრივი ცვლადები
არსებობის დრო პროგრამის დაწყებიდან დასრულებამდე განსაზღვრის დროიდან ბლოკიდან გამოსვლამდე განსაზღვრის პირველი მიღწევიდან პროგრამის დასრულებამდე
საწყობი ადგილი სტატიკური მეხსიერება (.data, .bss) სტეკი სტატიკური მეხსიერება (.data, .bss)
ინიციალიზაცია main()-ის გამოძახებამდე ან პროგრამის ჩატვირთვისას ავტომატურად არ ინიცირებულია. საჭიროებს გამოხატულ ინიციალიზაციას ერთხელ, განსაზღვრის პირველ მიღწევაზე
ხელმისაწვდომობა ყველგან სქოპის ფარგლებში მხოლოდ ბლოკში, სადაც განსაზღვრულია მხოლოდ ბლოკში, სადაც განსაზღვრულია