Ushbu stsenariylarning har biri xotira migratsiyasi yaratadimi?

Bir necha soatdan keyin xotiradan o'chib ketadigan katta c ++ dasturini tuzatishga urinayapmanmi, bularning barchasi xotira migratsiyasi yaratadimi?

Scenario 1 : The use of & (without delete or anything like this) :

inline int testFunc(std::vector& peaksArray, int& tmp) {
for (int Index : peaksArray) 
{
tmp++
}
}

Stsenariy 2: char [] dan foydalanish ( delete yoki shunga o'xshash narsa):

char debug[500];    

Men dasturda hech qachon foydalanmayman:

  • new
  • delcaration with *
  • delete (maybe I should ?)

Javoblaringiz uchun tashakkur,

Hurmat bilan

1
Xotirani ajratish xotira ajratilganda va hech qachon ajratilmaydi. Yuqoridagi narsalarning har biri xotiraning ajratilishi va hech qachon ajratilmasligiga sabab bo'ladimi?
qo'shib qo'ydi muallif immibis, manba
Bu sizning kodingizmi? Xotirani olib tashlash uchun boshqa manbalar bormi? Sizning vektoringiz (yoki boshqa konteyner) aslida juda katta bo'lishi mumkinmi?
qo'shib qo'ydi muallif cbuchart, manba
Siz ko'proq manbadan oqmasdan foydalanishingiz mumkin yoki siz xotiradan tashqari kuzatuvingiz uchun parchalanishingiz mumkin.
qo'shib qo'ydi muallif Jarod42, manba
Siz ko'proq manbadan oqmasdan foydalanishingiz mumkin yoki siz xotiradan tashqari kuzatuvingiz uchun parchalanishingiz mumkin.
qo'shib qo'ydi muallif Jarod42, manba
Siz qo'ygan kod xotiradan chiqmaydi.
qo'shib qo'ydi muallif GigaRohan, manba

6 javoblar

Agar siz yangi foydalanmasangiz, yo'q qilishni ishlatmang. Mahalliy o'zgaruvchilar e'lon qilingan ko'lamdagi ko'rsatuv xizmat muddatiga ega. Vaqt tugashi bilan, bu o'zgarmaydigan natija aniqlanmagan xatti-harakatlarda foydalanishga urinadi.

6
qo'shib qo'ydi
Pedantik ma'noda, ular "avtomatik saqlash muddati" bilan o'zgaruvchilar deb nomlanadi
qo'shib qo'ydi muallif WhiZTiM, manba

Agar siz yangi foydalanmasangiz, yo'q qilishni ishlatmang. Mahalliy o'zgaruvchilar e'lon qilingan ko'lamdagi ko'rsatuv xizmat muddatiga ega. Vaqt tugashi bilan, bu o'zgarmaydigan natija aniqlanmagan xatti-harakatlarda foydalanishga urinadi.

6
qo'shib qo'ydi
Pedantik ma'noda, ular "avtomatik saqlash muddati" bilan o'zgaruvchilar deb nomlanadi
qo'shib qo'ydi muallif WhiZTiM, manba

Agar siz yangi foydalanmasangiz, yo'q qilishni ishlatmang. Mahalliy o'zgaruvchilar e'lon qilingan ko'lamdagi ko'rsatuv xizmat muddatiga ega. Vaqt tugashi bilan, bu o'zgarmaydigan natija aniqlanmagan xatti-harakatlarda foydalanishga urinadi.

6
qo'shib qo'ydi
Pedantik ma'noda, ular "avtomatik saqlash muddati" bilan o'zgaruvchilar deb nomlanadi
qo'shib qo'ydi muallif WhiZTiM, manba

Siz buni tushunishingizga o'xshaydi - bir istisno bilan: Sizning namunangizda disk raskadrovka - bu har bir narsaga o'xshash bir o'zgaruvchining o'zgaruvchisidir. yangi yoki malloc-dagi birikma hosil qiladi, hamma narsa (mahalliy o'zgaruvchilar va boshqalar) stack ustida. Va asosiy mahalliy o'zgaruvchilar boshqa funksiyalarning o'zgaruvchilardan farq qilmaydi.

Birgalikda foydalaniladigan xotira juda kam holatlardir, siz odatda bunga muhtoj emassiz va shuning uchun siz uni aniq so'ramaguningizcha, sizga ega bo'lmaysiz (aks holda, tasodifiy boshqa jarayon sizning jarayoningizdan foydalanadigan xotiradan foydalanishi mumkin - aniq yomon narsalarni buzish).

Qo'shimcha ma'lumot uchun bu yerda ko'ring.

1
qo'shib qo'ydi
qo'shib qo'ydi muallif user4581301, manba

Siz buni tushunishingizga o'xshaydi - bir istisno bilan: Sizning namunangizda disk raskadrovka - bu har bir narsaga o'xshash bir o'zgaruvchining o'zgaruvchisidir. yangi yoki malloc-dagi birikma hosil qiladi, hamma narsa (mahalliy o'zgaruvchilar va boshqalar) stack ustida. Va asosiy mahalliy o'zgaruvchilar boshqa funksiyalarning o'zgaruvchilardan farq qilmaydi.

Birgalikda foydalaniladigan xotira juda kam holatlardir, siz odatda bunga muhtoj emassiz va shuning uchun siz uni aniq so'ramaguningizcha, sizga ega bo'lmaysiz (aks holda, tasodifiy boshqa jarayon sizning jarayoningizdan foydalanadigan xotiradan foydalanishi mumkin - aniq yomon narsalarni buzish).

Qo'shimcha ma'lumot uchun bu yerda ko'ring.

1
qo'shib qo'ydi
qo'shib qo'ydi muallif user4581301, manba

Siz buni tushunishingizga o'xshaydi - bir istisno bilan: Sizning namunangizda disk raskadrovka - bu har bir narsaga o'xshash bir o'zgaruvchining o'zgaruvchisidir. yangi yoki malloc-dagi birikma hosil qiladi, hamma narsa (mahalliy o'zgaruvchilar va boshqalar) stack ustida. Va asosiy mahalliy o'zgaruvchilar boshqa funksiyalarning o'zgaruvchilardan farq qilmaydi.

Birgalikda foydalaniladigan xotira juda kam holatlardir, siz odatda bunga muhtoj emassiz va shuning uchun siz uni aniq so'ramaguningizcha, sizga ega bo'lmaysiz (aks holda, tasodifiy boshqa jarayon sizning jarayoningizdan foydalanadigan xotiradan foydalanishi mumkin - aniq yomon narsalarni buzish).

Qo'shimcha ma'lumot uchun bu yerda ko'ring.

1
qo'shib qo'ydi
qo'shib qo'ydi muallif user4581301, manba