ДинамичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ c: ДинамичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти Π² си

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ДинамичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти | ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° C ΠΈ C++

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² основной памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° двумя основными спо­собами. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ массивы, струк­туры ΠΈ классы. Π’ случаС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ статичСских Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… мСсто хранСния ΠΈΠ½Ρ„ΠΎΡ€Β­ΠΌΠ°Ρ†ΠΈΠΈ фиксируСтся Π½Π° всС врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ случаС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ°ΠΌΡΡ‚ΡŒ выдСляСтся Π² стСкС. Π₯отя Π² Borland Π‘++ Ρ€Π°Π±ΠΎΡ‚Π° с этими ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΎΡ‡Π΅Π½ΡŒ эффСк­тивно, ΠΈΡ… использованиС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ программиста Π·Π½Π°Ρ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ потрС­буСтся Π² Ρ…ΠΎΠ΄Π΅ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’Ρ‚ΠΎΡ€Ρ‹ΠΌ способом хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ слуТит использованиС систСмы динамичСского выдС­лСния памяти Borland Π‘++. Π’ этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΏΠ°ΠΌΡΡ‚ΡŒ для хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ выдСляСтся ΠΈΠ· сво­бодной области памяти ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ надобности ΠΈ возвращаСтся Π½Π°Π·Π°Π΄, Ρ‚.Π΅. освобоТдаСтся, ΠΊΠΎΠ³Π΄Π° Π½Π°Π΄ΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Π² Π½Π΅ΠΉ исчСзла. ΠžΠ±Π»Π°ΡΡ‚ΡŒ свободной памяти Π»Π΅ΠΆΠΈΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ памяти, Π³Π΄Π΅ размС­щаСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΈ стСком. Π­Ρ‚Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ называСтся ΠΊΡƒΡ‡Π΅ΠΉ (heap) ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для запросов Π½Π° динамичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠΌ использования динамичСской памяти слуТит Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΌΠΎΒ­ΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована для хранСния Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² процСссС исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠ°ΠΌΡΡ‚ΡŒ выдСляСтся для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ†Π΅Π»ΠΈ ΠΈ освобоТдаСтся, ΠΊΠΎΠ³Π΄Π° Π΅Π΅ использованиС Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΎΡΡŒ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ ΡΠ°ΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π”Ρ€ΡƒΠ³ΠΈΠΌ прСимущСством динамичСского выдСлСния памяти явля­Стся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания с Π΅Π΅ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ связанных списков, Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… дина­мичСских структур Π΄Π°Π½Π½Ρ‹Ρ….

Π―Π΄Ρ€ΠΎΠΌ динамичСского выдСлСния памяти языка Π‘ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ malloc() ΠΈ free(), ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ частями стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ malloc() осущСствляСтся запрос Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти, выдСляСтся порция ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉΡΡ Π² Π½Π°Π»ΠΈΡ‡ΠΈΠΈ свободной памяти. Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° эта ΠΏΠ°ΠΌΡΡ‚ΡŒ освобоТдаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ free(), эта ΠΏΠ°ΠΌΡΡ‚ΡŒ возвращаСтся Π½Π°Π·Π°Π΄ систСмС.

Π―Π·Ρ‹ΠΊ Π‘++ опрСдСляСт Π΄Π²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° динамичСского выдСлСния памя­ти β€” new ΠΈ delete.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ ANSI Π‘ опрСдСляСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ динамичСского выдСлСния памяти: calloc(), malloc(), free() ΠΈ realloc(). Однако Borland Π‘++ содСрТит нСсколько Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ динамичСс­кого выдСлСния памяти. ΠŸΡ€ΠΈ компиляции ΠΊΠΎΠ΄Π° для соврСмСнной 32-разрядной ΠΌΠΎΠ΄Π΅Π»ΠΈ памяти, ΠΏΠ°ΠΌΡΡ‚ΡŒ являСт­ся плоской ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ выдСлСния памяти.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ ANSI Π‘ опрСдСляСт, Ρ‡Ρ‚ΠΎ заголовочная информация, нСобходимая для динамичСского выдСлСния памяти, содСрТится Π² Ρ„Π°ΠΉΠ»Π΅ stdlib.h. Однако Borland Π‘++ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π³ΠΎΒ­Π»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ stdlib.h ΠΈΠ»ΠΈ alloc.h. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» stdlib.h, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это обСспСчиваСт ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ. НСкоторыС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ динамичСского выдСлСния памяти Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² alloc.h, malloc.h ΠΈΠ»ΠΈ dos.h. НСобходимо ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒ особоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для использования ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

БтатичСский массив ΠΏΡ€ΠΎΡ‚ΠΈΠ² динамичСского массива Π² C ++

Π’Π°ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‡Π΅Ρ‚ΠΊΠΈΠ΅ опрСдСлСния Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹. К соТалСнию, сущСствуСт нСсколько ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ статичСскиС ΠΈ динамичСскиС массивы.

БтатичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ — это ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ с использованиСм статичСского распрСдСлСния памяти . Π­Ρ‚ΠΎ общая концСпция, Π½Π΅ зависящая ΠΎΡ‚ C / C ++. Π’ C / C ++ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ статичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с глобальной, Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΠΈΠ»ΠΈ локальной ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

int x[10]; 
static int y[10]; 
foo() {
    static int z[10]; 

АвтоматичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ с использованиСм выдСлСния памяти Π½Π° основС стСка . АвтоматичСский массив ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π° C / C ++ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

foo() {
    int w[10]; 

ΠžΠ±Ρ‰ΠΈΠΌ для этих массивов, x, y, zΠΈ wявляСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… фиксирован ΠΈ опрСдСляСтся Π²ΠΎ врСмя компиляции.

Одна ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ автоматичСским массивом ΠΈ статичСским массивом, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ статичСскоС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ рСализуСтся Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π΄Π°Π½Π½Ρ‹Ρ… (ΠΈΠ»ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅ BSS ) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, ΠΈ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ адрСса для доступа ΠΊ массивам. Ρ‡Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠΈ Π½Π° основС стСка.

Под динамичСским массивом ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ подразумСваСтся Π½Π΅ Ρ‚ΠΎΡ‚, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ, Π° Ρ‚ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ с использованиСм динамичСского распрСдСлСния памяти с фиксированным Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ, опрСдСляСмым Π²ΠΎ врСмя выполнСния. Π’ C ++ это дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ newΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° .

foo() {
   int *d = new int[n]; 

Но ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ автоматичСский массив с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ исправлСний, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π²ΠΎ врСмя выполнСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ alloca:

foo() {
    int *s = (int*)alloca(n*sizeof(int))

Для настоящСго динамичСского массива слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ std::vectorC ++ (ΠΈΠ»ΠΈ массив ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π² C ).

Π§Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π² вопросС ОП? Π― Π΄ΡƒΠΌΠ°ΡŽ, ясно , Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ , Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚Π΅Π»ΠΈ , Π½Π΅ Π±Ρ‹Π» статичным ΠΈΠ»ΠΈ автоматичСским массивом , Π½ΠΎ ΠΎΠ΄ΠΈΠ½ , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈΠ±ΠΎ динамичСскоС распрСдСлСниС памяти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ newΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈΠ»ΠΈ массив нСфиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° , ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ , Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ std::vector.

ДинамичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ доступом

DRAM (Dynamic Random Access Memory)Β β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΈΠ΄ΠΎΠ² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ памяти с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ доступом (RAM), Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² качСствС ΠžΠ—Π£ соврСмСнных ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ².

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ DRAM состоит ΠΈΠ· «ячССк» Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π² 1 ΠΈΠ»ΠΈ 4 Π±ΠΈΡ‚, Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΡ‘ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. Π‘ΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ «ячССк» Ρ‚Π°ΠΊΠΎΠΉ памяти ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ условный Β«ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΒ», состоящий ΠΈΠ· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ количСства строк ΠΈ столбцов. Один Ρ‚Π°ΠΊΠΎΠΉ Β«ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΒ» называСтся страницСй, Π° ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ страниц называСтся Π±Π°Π½ΠΊΠΎΠΌ. Π’Π΅ΡΡŒ Π½Π°Π±ΠΎΡ€ «ячССк» условно дСлится Π½Π° нСсколько областСй.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ дСйствия

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ дСйствия чтСния DRAM для простого массива 4 Π½Π° 4.

ЀизичСскоС прСдставлСниС

Π’ соврСмСнных ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… физичСски DRAM-ΠΏΠ°ΠΌΡΡ‚ΡŒ прСдставляСт собой ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ»Π°Ρ‚ΡƒΒ β€” ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ располоТСны микросхСмы памяти ΠΈ Ρ€Π°Π·ΡŠΡ‘ΠΌ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ модуля ΠΊ матСринской ΠΏΠ»Π°Ρ‚Π΅. Роль «ячССк» ΠΈΠ³Ρ€Π°ΡŽΡ‚ кондСнсаторы ΠΈ транзисторы, располоТСнныС Π²Π½ΡƒΡ‚Ρ€ΠΈ микросхСм памяти. ΠšΠΎΠ½Π΄Π΅Π½ΡΠ°Ρ‚ΠΎΡ€Ρ‹ Π·Π°Ρ€ΡΠΆΠ°ΡŽΡ‚ΡΡ Π² случаС, ΠΊΠΎΠ³Π΄Π° Π² «ячСйку» заносится Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΉ Π±ΠΈΡ‚, Π»ΠΈΠ±ΠΎ Ρ€Π°Π·Ρ€ΡΠΆΠ°ΡŽΡ‚ΡΡ Π² случаС, ΠΊΠΎΠ³Π΄Π° Π² «ячСйку» заносится Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π±ΠΈΡ‚. Вранзисторы Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для удСрТания заряда Π²Π½ΡƒΡ‚Ρ€ΠΈ кондСнсатора. ΠŸΡ€ΠΈ отсутствии ΠΏΠΎΠ΄Π°Ρ‡ΠΈ элСктроэнСргии ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, происходит разряд кондСнсаторов, ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΎΠΏΡƒΡΡ‚ΠΎΡˆΠ°Π΅Ρ‚ΡΡ. Π­Ρ‚ΠΎ динамичСскоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ заряда кондСнсатора являСтся ΠΎΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ памяти Ρ‚ΠΈΠΏΠ° DRAM. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ памяти этого Ρ‚ΠΈΠΏΠ° являСтся Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡΠΈΠ»ΠΈΡ‚Π΅Π»ΡŒ (Π°Π½Π³Π». sense amp), ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· столбцов Β«ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°Β». Он, рСагируя Π½Π° слабый ΠΏΠΎΡ‚ΠΎΠΊ элСктронов, ΡƒΡΡ‚Ρ€Π΅ΠΌΠΈΠ²ΡˆΠΈΡ…ΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ транзисторы с ΠΎΠ±ΠΊΠ»Π°Π΄ΠΎΠΊ кондСнсаторов, считываСт всю страницу Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. ИмСнно страница являСтся минимальной ΠΏΠΎΡ€Ρ†ΠΈΠ΅ΠΉ ΠΎΠ±ΠΌΠ΅Π½Π° с динамичСской ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ взятой ячСйкой Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½.

Π₯арактСристики памяти DRAM

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌΠΈ характСристиками DRAM ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΉΠΌΠΈΠ½Π³ΠΈ ΠΈ рабочая частота. Для обращСния ΠΊ ячСйкС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π·Π°Π΄Π°Ρ‘Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ Π±Π°Π½ΠΊΠ°, Π½ΠΎΠΌΠ΅Ρ€ страницы Π² Π½Ρ‘ΠΌ, Π½ΠΎΠΌΠ΅Ρ€ строки ΠΈ Π½ΠΎΠΌΠ΅Ρ€ столбца, Π½Π° всС запросы тратится врСмя, ΠΏΠΎΠΌΠΈΠΌΠΎ этого довольно большой ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π±Π°Π½ΠΊΠ° послС самой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. На ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ дСйствиС трСбуСтся врСмя, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Ρ‚Π°ΠΉΠΌΠΈΠ½Π³ΠΎΠΌ. ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌΠΈ Ρ‚Π°ΠΉΠΌΠΈΠ½Π³Π°ΠΌΠΈ DRAM ΡΠ²Π»ΡΡŽΡ‚ΡΡ: Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ΄Π°Ρ‡Π΅ΠΉ Π½ΠΎΠΌΠ΅Ρ€Π° строки ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° столбца, называСмая Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ доступа (Π°Π½Π³Π». RAS to CAS delay), Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ΄Π°Ρ‡Π΅ΠΉ Π½ΠΎΠΌΠ΅Ρ€Π° столбца ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ содСрТимого ячСйки, называСмая Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π° (Π°Π½Π³Π». CAS delay), Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ послСднСй ячСйки ΠΈ ΠΏΠΎΠ΄Π°Ρ‡Π΅ΠΉ Π½ΠΎΠΌΠ΅Ρ€Π° Π½ΠΎΠ²ΠΎΠΉ строки (Π°Π½Π³Π». RAS precharge). Π’Π°ΠΉΠΌΠΈΠ½Π³ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€ΡΡŽΡ‚ΡΡ Π² наносСкундах, ΠΈ Ρ‡Π΅ΠΌ мСньшС Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° этих Ρ‚Π°ΠΉΠΌΠΈΠ½Π³ΠΎΠ², Ρ‚Π΅ΠΌ быстрСС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ опСративная ΠΏΠ°ΠΌΡΡ‚ΡŒ. Рабочая частота измСряСтся Π² ΠΌΠ΅Π³Π°Π³Π΅Ρ€Ρ†Π°Ρ…, ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ частоты памяти ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ Π΅Ρ‘ быстродСйствия.

РСгСнСрация

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ статичСской памяти Ρ‚ΠΈΠΏΠ° Π°Π½Π³Π». static random access memory), которая являСтся конструктивно Π±ΠΎΠ»Π΅Π΅ слоТным ΠΈ Π±ΠΎΠ»Π΅Π΅ Π΄ΠΎΡ€ΠΎΠ³ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ памяти RAM ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² основном Π² ΠΊΡΡˆβ€”ΠΏΠ°ΠΌΡΡ‚ΠΈ, ΠΏΠ°ΠΌΡΡ‚ΡŒ DRAM изготавливаСтся Π½Π° основС кондСнсаторов нСбольшой ёмкости, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ быстро Ρ‚Π΅Ρ€ΡΡŽΡ‚ заряд, поэтому ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ приходится ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎΡ‚ процСсс называСтся Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ памяти. Он рСализуСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ, установлСнным Π½Π° матСринской ΠΏΠ»Π°Ρ‚Π΅ ΠΈΠ»ΠΈ Π½Π° кристаллС Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ процСссора. На протяТСнии Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ шагом Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ, Π² DRAM пСрСзаписываСтся цСлая строка «ячССк», ΠΈ Ρ‡Π΅Ρ€Π΅Π· 8-64 мс ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ всС строки памяти.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ памяти Π² классичСском Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ сущСствСнно Β«Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚Β» Ρ€Π°Π±ΠΎΡ‚Ρƒ систСмы, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² это врСмя ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½. РСгСнСрация, основанная Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π΅ строк, Π½Π΅ примСняСтся Π² соврСмСнных Ρ‚ΠΈΠΏΠ°Ρ… DRAM. БущСствуСт нСсколько Π±ΠΎΠ»Π΅Π΅ экономичных Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² этого процСсса — Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ, ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ, распрСдСлСнный; Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ экономичной являСтся скрытая рСгСнСрация.

Из Π½ΠΎΠ²Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ PASR (Π°Π½Π³Π». Partial Array Self Refresh), примСняСмый ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Samsung Π² Ρ‡ΠΈΠΏΠ°Ρ… памяти SDRAM с Π½ΠΈΠ·ΠΊΠΈΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ энСргопотрСблСния. РСгСнСрация «ячССк» выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ оТидания Π² Ρ‚Π΅Ρ… Π±Π°Π½ΠΊΠ°Ρ… памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с этой Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ рСализуСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ TCSR (Π°Π½Π³Π». Temperature Compensated Self Refresh), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠΈ скорости процСсса Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π² зависимости ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹.

Π’ΠΈΠΏΡ‹ DRAM

На протяТСнии Π΄ΠΎΠ»Π³ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ создавались Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ памяти. Они ΠΎΠ±Π»Π°Π΄Π°Π»ΠΈ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ характСристиками, Π² Π½ΠΈΡ… Π±Ρ‹Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ€Π°Π·Π½Ρ‹Π΅ тСхничСскиС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Основной Π΄Π²ΠΈΠΆΡƒΡ‰Π΅ΠΉ силой развития памяти Π±Ρ‹Π»ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π­Π’Πœ ΠΈ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹Ρ… процСссоров. ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½ΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ быстродСйствия ΠΈ ΠΎΠ±ΡŠΡ‘ΠΌΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти.

Бтраничная ΠΏΠ°ΠΌΡΡ‚ΡŒ

Бтраничная ΠΏΠ°ΠΌΡΡ‚ΡŒ (Π°Π½Π³Π». page mode DRAM, PM DRAM) являлась ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² выпускаСмой ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. ΠŸΠ°ΠΌΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π²Ρ‹ΠΏΡƒΡΠΊΠ°Π»Π°ΡΡŒ Π² Π½Π°Ρ‡Π°Π»Π΅ 90-Ρ… Π³ΠΎΠ΄ΠΎΠ², Π½ΠΎ с ростом ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹Ρ… процСссоров ΠΈ рСсурсоёмкости ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΡ‘ΠΌ памяти, Π½ΠΎ ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π΅Ρ‘ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Быстрая страничная ΠΏΠ°ΠΌΡΡ‚ΡŒ

Быстрая страничная ΠΏΠ°ΠΌΡΡ‚ΡŒ (Π°Π½Π³Π». fast page mode DRAM, FPM DRAM) появилась Π² 1995 Π³ΠΎΠ΄Ρƒ. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Π½ΠΎΠ²Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅ ΠΏΡ€Π΅Ρ‚Π΅Ρ€ΠΏΠ΅Π»Π°, Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄ΠΎΡΡ‚ΠΈΠ³Π°Π»ΠΎΡΡŒ ΠΏΡƒΡ‚Ρ‘ΠΌ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ памяти. Π”Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ памяти Π² основном примСнялся для ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² с процСссорами Intel 80486 ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… процСссоров Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΠΈΡ€ΠΌ. ΠŸΠ°ΠΌΡΡ‚ΡŒ ΠΌΠΎΠ³Π»Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° частотах 25 ΠœΠ“Ρ† ΠΈ 33 ΠœΠ“Ρ† с Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ доступа 70 нс ΠΈ 60 нс ΠΈ с Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π° 40 нс ΠΈ 35 нс соотвСтствСнно.

ΠŸΠ°ΠΌΡΡ‚ΡŒ с ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ

C появлСниСм процСссоров Intel Pentium ΠΏΠ°ΠΌΡΡ‚ΡŒ FPM DRAM оказалась ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ нСэффСктивной. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом стала ΠΏΠ°ΠΌΡΡ‚ΡŒ с ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ (Π°Π½Π³Π». extended data out DRAM, EDO DRAM). Π­Ρ‚Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ появилась Π½Π° Ρ€Ρ‹Π½ΠΊΠ΅ Π² 1996 Π³ΠΎΠ΄Ρƒ ΠΈ стала Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… с процСссорами Intel Pentium ΠΈ Π²Ρ‹ΡˆΠ΅. Π•Ρ‘ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ оказалась Π½Π° 10β€”15Β % Π²Ρ‹ΡˆΠ΅ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Ρ‚ΠΈΠΏΠ° FPM DRAM. Π•Ρ‘ рабочая частота Π±Ρ‹Π»Π° 40 ΠœΠ“Ρ† ΠΈ 50 ΠœΠ“Ρ†, соотвСтствСнно, врСмя ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ доступа — 60 нс ΠΈ 50 нс, Π° врСмя Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°Β β€” 25 нс ΠΈ 20 нс. Π­Ρ‚Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ содСрТит рСгистр-Π·Π°Ρ‰Π΅Π»ΠΊΡƒ (Π°Π½Π³Π». data latch) Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ обСспСчиваСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ.

Бинхронная DRAM

Π’ связи с выпуском Π½ΠΎΠ²Ρ‹Ρ… процСссоров ΠΈ постСпСнным ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ частоты систСмной ΡˆΠΈΠ½Ρ‹, ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ памяти Ρ‚ΠΈΠΏΠ° EDO DRAM стала Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΠΏΠ°Π΄Π°Ρ‚ΡŒ. Π•ΠΉ Π½Π° смСну ΠΏΡ€ΠΈΡˆΠ»Π° синхронная ΠΏΠ°ΠΌΡΡ‚ΡŒ (Π°Π½Π³Π». synchronous DRAM, Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° для синхронизации всСх сигналов ΠΈ использованиС ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π’Π°ΠΊΠΆΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° Π½Π° Π±ΠΎΠ»Π΅Π΅ высоких частотах систСмной ΡˆΠΈΠ½Ρ‹ (100 ΠœΠ“Ρ† ΠΈ Π²Ρ‹ΡˆΠ΅). НСдостатками Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° памяти являлась Π΅Π³ΠΎ высокая Ρ†Π΅Π½Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΅Π³ΠΎ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ со ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ чипсСтами ΠΈ матСринскими ΠΏΠ»Π°Ρ‚Π°ΠΌΠΈ Π² силу своих Π½ΠΎΠ²Ρ‹Ρ… конструктивных особСнностСй. Π Π°Π±ΠΎΡ‡ΠΈΠ΅ частоты этого Ρ‚ΠΈΠΏΠ° памяти ΠΌΠΎΠ³Π»ΠΈ Ρ€Π°Π²Π½ΡΡ‚ΡŒΡΡ 66 ΠœΠ“Ρ†, 100 ΠœΠ“Ρ† ΠΈΠ»ΠΈ 133 ΠœΠ“Ρ†, врСмя ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ доступа — 40 нс ΠΈ 30 нс, Π° врСмя Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°Β β€” 10 нс ΠΈ 7,5 нс.

ΠŸΠ°ΠΊΠ΅Ρ‚Π½Π°Ρ EDO RAM

ΠŸΠ°ΠΊΠ΅Ρ‚Π½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ EDO RAM (Π°Π½Π³Π». burst extended data output DRAM, BEDO DRAM) стала Π΄Π΅ΡˆΡ‘Π²ΠΎΠΉ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ памяти Ρ‚ΠΈΠΏΠ° SDRAM. Основанная Π½Π° памяти EDO DRAM, Π΅Ρ‘ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ являлась тСхнология ΠΏΠΎΠ±Π»ΠΎΡ‡Π½ΠΎΠ³ΠΎ чтСния Π΄Π°Π½Π½Ρ‹Ρ… (Π±Π»ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… читался Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ‚Π°ΠΊΡ‚), Ρ‡Ρ‚ΠΎ сдСлало Π΅Ρ‘ Ρ€Π°Π±ΠΎΡ‚Ρƒ быстрСС, Ρ‡Π΅ΠΌ Ρƒ памяти Ρ‚ΠΈΠΏΠ° SDRAM. Однако Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° частотС систСмной ΡˆΠΈΠ½Ρ‹ Π±ΠΎΠ»Π΅Π΅ 66 ΠœΠ“Ρ† Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° Π΄Π°Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ памяти ΡΡ‚Π°Ρ‚ΡŒ популярным.

Video RAM

CΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Video RAM (Π²ΠΈΠ΄Π΅ΠΎΠΏΠ»Π°Ρ‚Π°Ρ…. Он позволял ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… Π² процСссС обновлСния изобраТСния, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ высокого качСства. На основС памяти Ρ‚ΠΈΠΏΠ° VRAM, появилась спСцификация памяти Ρ‚ΠΈΠΏΠ° Windows RAM (ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ систСмами сСмСйства Windows. Π•Ρ‘ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ стала Π½Π° 25Β % Π²Ρ‹ΡˆΠ΅, Ρ‡Π΅ΠΌ Ρƒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ памяти Ρ‚ΠΈΠΏΠ° SDRAM, благодаря Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ тСхничСским измСнСниям.

DDR SDRAM

По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Ρ‚ΠΈΠΏΠ° SDRAM, Π² памяти SDRAM с ΡƒΠ΄Π²ΠΎΠ΅Π½Π½ΠΎΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (Π°Π½Π³Π». double data rate SDRAM, DDR SDRAM ΠΈΠ»ΠΈ SDRAM II) Π±Ρ‹Π»Π° Π²Π΄Π²ΠΎΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π° пропускная ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ. ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ»Π°ΡΡŒ Π² Π²ΠΈΠ΄Π΅ΠΎΠΏΠ»Π°Ρ‚Π°Ρ…, Π½ΠΎ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ появилась ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° DDR SDRAM со стороны чипсСтов. Она Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° частотах Π² 100 ΠœΠ“Ρ† ΠΈ 133 ΠœΠ“Ρ†, Π΅Ρ‘ врСмя ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ доступа — 30 нс ΠΈ 22,5 нс, Π° врСмя Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°Β β€” 5 нс ΠΈ 3,75 нс.

Direct RDRAM, ΠΈΠ»ΠΈ Direct Rambus DRAM

Π’ΠΈΠΏ памяти Rambus. ВысокоС быстродСйствиС этой памяти достигаСтся рядом особСнностСй, Π½Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠ°Ρ… памяти. ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ ΠΎΡ‡Π΅Π½ΡŒ высокая ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ памяти RDRAM ΠΏΡ€ΠΈΠ²Π΅Π»Π° ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ ΠΌΠΎΡ‰Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π»ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ, Π·Π°Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΡˆΡ‘Π²ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ DDR SDRAM. Π Π°Π±ΠΎΡ‡ΠΈΠ΅ частоты памяти — 400 ΠœΠ“Ρ†, 600 ΠœΠ“Ρ† ΠΈ 800 ΠœΠ“Ρ†, врСмя ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ доступа — Π΄ΠΎ 30 нс, врСмя Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°Β β€” Π΄ΠΎ 2,5 нс.

DDR2 SDRAM

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти DDR2 SDRAM Π±Ρ‹Π» Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½ Π² 2004 Π³ΠΎΠ΄Ρƒ. ΠžΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ DDR SDRAM, этот Ρ‚ΠΈΠΏ памяти Π·Π° счёт тСхничСских ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ высокоС быстродСйствиС ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для использования Π½Π° соврСмСнных ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…. ΠŸΠ°ΠΌΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° частотах Π² 200 ΠœΠ“Ρ†, 266 ΠœΠ“Ρ†, 333 ΠœΠ“Ρ† ΠΈ 400 ΠœΠ“Ρ†. ВрСмя ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ доступа — 25 нс, 11,25 нс, 9 нс, 7,5 нс. ВрСмя Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°Β β€” 5 нс, 3,75 нс, 3 нс, 3,5 нс.

ΠšΠΎΡ€ΠΏΡƒΡΠ°

Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ корпуса DRAM. Π‘Π²Π΅Ρ€Ρ…Ρƒ Π²Π½ΠΈΠ·: DIP, SIP, SIMM (30-ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹ΠΉ), SIMM (72-ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹ΠΉ), DIMM (168-ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹ΠΉ), DIMM (184-ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹ΠΉ, DDR)

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ памяти Ρ‚ΠΈΠΏΠ° DRAM конструктивно Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π»ΠΈΠ±ΠΎ Π² Π²ΠΈΠ΄Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… микросхСм Π² корпусах Ρ‚ΠΈΠΏΠ° SIP (Single In-Line Package), DIMM (Dual In-line Memory Module), RIMM (Rambus In-line Memory Module). ΠœΠΈΠΊΡ€ΠΎΡΡ…Π΅ΠΌΡ‹ Π² корпусах Ρ‚ΠΈΠΏΠ° DIP Π²Ρ‹ΠΏΡƒΡΠΊΠ°Π»ΠΈΡΡŒ Π΄ΠΎ использования ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ памяти. Π­Ρ‚ΠΈ микросхСмы ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Π²Π° ряда ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ², располоТСнных вдоль Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… сторон Ρ‡ΠΈΠΏΠ° ΠΈ Π·Π°Π³Π½ΡƒΡ‚Ρ‹Ρ… Π²Π½ΠΈΠ·.

ΠœΠΎΠ΄ΡƒΠ»ΠΈ SIP

ΠœΠΎΠ΄ΡƒΠ»ΠΈ Ρ‚ΠΈΠΏΠ° SIP ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΠ»Π°Ρ‚Ρ‹ с ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π°ΠΌΠΈ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… ΡˆΡ‚Ρ‹Ρ€ΡŒΠΊΠΎΠ². Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ памяти Π² настоящСС врСмя практичСски Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π±Ρ‹Π» вытСснСн модулями памяти Ρ‚ΠΈΠΏΠ° SIMM.

ΠœΠΎΠ΄ΡƒΠ»ΠΈ SIMM

ΠœΠΎΠ΄ΡƒΠ»ΠΈ Ρ‚ΠΈΠΏΠ° SIMM ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρƒ с ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½ΠΎΠΉ полосой вдоль ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· сторон, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Ρ„ΠΈΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Ρ€Π°Π·ΡŠΡ‘ΠΌΠ΅ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π·Π°Ρ‰Ρ‘Π»ΠΎΠΊ. НаиболСС распространСны 30- ΠΈ 72-ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹Π΅ SIMM. Π¨ΠΈΡ€ΠΎΠΊΠΎΠ΅ распространСниС нашли SIMM Π½Π° 4, 8, 16, 32 ΠΈ Π΄Π°ΠΆΠ΅ 64 ΠœΠ±Π°ΠΉΡ‚.

ΠœΠΎΠ΄ΡƒΠ»ΠΈ DIMM

ΠœΠΎΠ΄ΡƒΠ»ΠΈ Ρ‚ΠΈΠΏΠ° DIMM Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСны Π² Π²ΠΈΠ΄Π΅ 168-ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, устанавливаСмых Π² Ρ€Π°Π·ΡŠΡ‘ΠΌ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ ΠΈ фиксируСмых Π·Π°Ρ‰Ρ‘Π»ΠΊΠ°ΠΌΠΈ. Π’ ΠΏΠΎΡ€Ρ‚Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… устройствах ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ SO DIMMΒ β€” Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ DIMM ΠΌΠ°Π»ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (Π°Π½Π³Π». SO β€” small outline), ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ для ΠΏΠΎΡ€Ρ‚Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ². НаиболСС часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ 72- ΠΈ 144-ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Ρ‚ΠΈΠΏΠ° SO DIMM. ΠŸΠ°ΠΌΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠ° DDR SDRAM выпускаСтся Π² Π²ΠΈΠ΄Π΅ 184-ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹Ρ… DIMM-ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Π° для памяти Ρ‚ΠΈΠΏΠ° DDR2 SDRAM Π²Ρ‹ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ 240-ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

ΠœΠΎΠ΄ΡƒΠ»ΠΈ RIMM

ΠœΠΎΠ΄ΡƒΠ»ΠΈ Ρ‚ΠΈΠΏΠ° RIMM ΠΌΠ΅Π½Π΅Π΅ распространСны, Π² Ρ‚Π°ΠΊΠΈΡ… модулях выпускаСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠ° Direct RDRAM. Они прСдставлСны 168/184-ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹ΠΌΠΈ[1] ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ»Π°Ρ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΠ°Ρ€Π°Ρ…, Π° пустыС Ρ€Π°Π·ΡŠΡ‘ΠΌΡ‹ Π½Π° матСринской ΠΏΠ»Π°Ρ‚Π΅ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π·Π°Π³Π»ΡƒΡˆΠΊΠ°ΠΌΠΈ. Π­Ρ‚ΠΎ связано с особСнностями конструкции Ρ‚Π°ΠΊΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Π’Π°ΠΊ ΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ 232-pin PC1066 RDRAM RIMM 4200, Π½Π΅ совмСстимыС с 184-ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹ΠΌΠΈ Ρ€Π°Π·ΡŠΡ‘ΠΌΠ°ΠΌΠΈ.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ

Π’ пятёрку ΠΊΡ€ΡƒΠΏΠ½Π΅ΠΉΡˆΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ DRAM ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Π°ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΊΠ²Π°Ρ€Ρ‚Π°Π»Π° 2008 Π³ΠΎΠ΄Π° вошли Samsung, Hynix, Elpida, Micron, Qimonda. Samsung занял 27Β % Ρ€Ρ‹Π½ΠΊΠ°. Однако Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ ΠΏΠΎ ΠΎΠ±ΡŠΡ‘ΠΌΡƒ производства Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… DRAM-ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ являСтся амСриканская Kingston.[2]

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Бсылки

Wikimedia Foundation.
2010.

ЛСкция 8. ДинамичСская организация Π΄Π°Π½Π½Ρ‹Ρ… β€” ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° языкС Π‘

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Π΄Π΅Ρ€Π΅Π²Π°

Π”Π΅Ρ€Π΅Π²ΠΎ (Π°Π½Π³Π». Tree) — иСрархичСская структура Π΄Π°Π½Π½Ρ‹Ρ…, состоящая ΠΈΠ· ΡƒΠ·Π»ΠΎΠ², располоТСнных Π½Π° уровнях ΠΈ соСдинённых вСтвями

ОсновноС прСимущСство Π΄Π΅Ρ€Π΅Π²Π° ΠΏΠ΅Ρ€Π΅Π΄ списком: ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ доступа ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Если Π² спискС доступ осущСствляСтся Π² срСднСм Π·Π° \(O(N)\) , Ρ‚ΠΎ Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ Π΄Π΅Ρ€Π΅Π²Π΅: \(O(log_2(N))\)

Π—Π°Π΄Π°Ρ‡Π°: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ срСди сотрудников Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΏΠΎ Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ Π—Π°Π΄ΠΎΡ€ΠΎΠΆΠ½Ρ‹ΠΉ.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ отсутствиС Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° с этой Ρ„Π°ΠΌΠΈΠ»ΠΈΠ΅ΠΉ Π² Π‘Π” сотрудников Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ 3 элСмСнта, Π° Π½Π΅ 7, ΠΊΠ°ΠΊ Π² случаС списка

ДрСвовидная структура характСризуСтся мноТСством ΡƒΠ·Π»ΠΎΠ², происходящих ΠΈΠ· СдинствСнного Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΡ€Π½Π΅ΠΌ. Π‘Ρ‹Π½ΠΎΠ²ΡŒΡ ΡƒΠ·Π»Π° ΠΈ ΡΡ‹Π½ΠΎΠ²ΡŒΡ сыновСй Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ ΡƒΠ·Π»Π°, Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ ΠΈ ΠΏΡ€Π°Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ — ΠΏΡ€Π΅Π΄ΠΊΠ°ΠΌΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π½Π΅ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΡƒΠ·Π΅Π» ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ родитСля ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ 0 ΠΈ Π±ΠΎΠ»Π΅Π΅ сыновСй. Π£Π·Π΅Π», Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Π΄Π΅Ρ‚Π΅ΠΉ, называСтся листом.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π» Π΄Π΅Ρ€Π΅Π²Π° являСтся ΠΊΠΎΡ€Π½Π΅ΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ опрСдСляСтся Π΄Π°Π½Π½Ρ‹ΠΌ ΡƒΠ·Π»ΠΎΠΌ ΠΈ всСми ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ этого ΡƒΠ·Π»Π°.

ΠŸΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΡƒΠ·Π»Π° ΠΊ Π΅Π³ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌΡƒ ΡƒΠ·Π»Ρƒ ΠΈ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌ осущСствляСтся вдоль ΠΏΡƒΡ‚ΠΈ. Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½Π΅ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΡƒΠ·Π΅Π» ΠΈΠΌΠ΅Π΅Ρ‚ СдинствСнного родитСля, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ сущСствуСт СдинствСнный ΠΏΡƒΡ‚ΡŒ ΠΈΠ· любого ΡƒΠ·Π»Π° ΠΊ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌ. ΠŸΡƒΡ‚ΡŒ ΠΎΡ‚ корня ΠΊ ΡƒΠ·Π»Ρƒ Π΄Π°Π΅Ρ‚ ΠΌΠ΅Ρ€Ρƒ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ ΡƒΠ·Π»Π°. Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π΅ΡΡ‚ΡŒ Π΄Π»ΠΈΠ½Π° ΠΏΡƒΡ‚ΠΈ ΠΎΡ‚ корня ΠΊ этому ΡƒΠ·Π»Ρƒ.

Π“Π»ΡƒΠ±ΠΈΠ½Π° Π΄Π΅Ρ€Π΅Π²Π° Π΅ΡΡ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ любого Π΅Π³ΠΎ ΡƒΠ·Π»Π° ΠΈΠ»ΠΈ Π΄Π»ΠΈΠ½Π° самого Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ ΠΎΡ‚ корня Π΄ΠΎ ΡƒΠ·Π»Π°.

Для Π΄Π΅Ρ€Π΅Π²Π°, ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΡ‘Π½Π½ΠΎΠ³ΠΎ Π½Π° рисункС:

  • A — ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΡƒΠ·Π΅Π» (Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ).
  • B,C — ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ уровня.
  • D,E — ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ уровня.
  • B,D,E — листы.
  • Π“Π»ΡƒΠ±ΠΈΠ½Π° Π΄Π΅Ρ€Π΅Π²Π° — 2.

C — РаспрСдСлСниС динамичСской памяти — Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹ — ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° C — DYclassroom

Π’ этом руководствС ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ ΠΎ динамичСском распрСдСлСнии памяти Π² языкС программирования C.

ΠœΡ‹ ΡƒΠ·Π½Π°Π»ΠΈ ΠΎ массивах Π² ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ΅ ΠΏΠΎ массивам. Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ для создания массива ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ количСство элСмСнтов Π² массивС Π΄ΠΎ компиляции ΠΊΠΎΠ΄Π°.

  int arr [10];
  

Если ΠΌΡ‹ Π½Π΅ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ‚ΠΎ ΠΏΡ€ΠΈ компиляции ΠΊΠΎΠ΄Π° ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²ΠΎ врСмя компиляции.

  int arr []; // это Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ
  

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ссли Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π±ΡƒΠ΄Π΅Ρ‚ слишком большим ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с количСством сохранСнных Π΄Π°Π½Π½Ρ‹Ρ….

И ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ столкнСмся с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, Ссли Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π±ΡƒΠ΄Π΅Ρ‚ мСньшС количСства Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ.

Π­Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° динамичСскоС распрСдСлСниС памяти Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ позволяСт Π½Π°ΠΌ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π²ΠΎ врСмя выполнСния.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для динамичСского выдСлСния памяти

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ, ΠΊΠΎΠ³Π΄Π° Ρ…ΠΎΡ‚ΠΈΠΌ динамичСски Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Ѐункция ОписаниС
Маллок Π­Ρ‚Π° функция выдСляСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π°ΠΉΡ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ области памяти.
calloc Π­Ρ‚Π° функция выдСляСт массив элСмСнтов, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… нулями ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ячСйку памяти.
ΠΏΠ΅Ρ€Π΅Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π­Ρ‚Π° функция измСняСт Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ области памяти.
бСсплатно Π­Ρ‚Π° функция освобоТдаСт Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ памяти

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ прСдставляСт ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти.

ВсС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ инструкции, Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ статичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ хранятся Π² области памяти, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ постоянной памяти .

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ хранятся Π² области памяти, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ стСком .

Бвободная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ постоянного хранСния ΠΈ стСком называСтся ΠΊΡƒΡ‡Π΅ΠΉ .Π­Ρ‚ΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, доступная для динамичСского распрСдСлСния Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π Π°Π·ΠΌΠ΅Ρ€ ΠΊΡƒΡ‡ΠΈ постоянно мСняСтся Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ·-Π·Π° создания ΠΈ удалСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π±Π»ΠΎΠΊΠΎΠ².

Π˜Ρ‚Π°ΠΊ, распространСнная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ, — это ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ памяти Π²ΠΎ врСмя динамичСского выдСлСния памяти.

Π’Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ распрСдСлСния памяти Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ NULL , ΠΊΠΎΠ³Π΄Π° нСдостаточно мСста Π² памяти для распрСдСлСния.

ИспользованиС ΠΌΠΎΠ΄Π΅Π»ΠΈ владСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ для бСзопасного управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² C ΠΈ C ++

Π’ этом сообщСнии Π² Π±Π»ΠΎΠ³Π΅ описываСтся ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠ°Ρ ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Π°, направлСнная Π½Π° устранСниС уязвимостСй, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… ΠΈΠ·-Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² C ΠΈ C ++. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² C ΠΈ C ++ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΌ уязвимостям ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ трудности с исправлСниСм ошибок, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, сбои ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля ΠΈ ошибки Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ памяти) ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² C ΠΈ C ++ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ уязвимости double-free) Π±Ρ‹Π»Π° Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ продСмонстрирована Π² 2000 Π³ΠΎΠ΄Ρƒ спСциалистом ΠΏΠΎ бСзопасности Solar Designer. Π•Ρ‰Π΅ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Solar Designer написал сообщСниС Π² Π±Π»ΠΎΠ³Π΅, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ эту Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ эксплойтов, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π±Ρ‹Π»ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΡ€ΠΈΠ·Π½Π°Π½Ρ‹ Π² сообщСствС программистов C с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ стандартизации C Π² 1989 Π³ΠΎΠ΄Ρƒ. Π­Ρ‚ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ ΠΏΡƒΡ‚Π΅ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ владСния для динамичСски выдСлСнная ΠΏΠ°ΠΌΡΡ‚ΡŒ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

Когда ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π΅ΠΉ прСдоставляСтся ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, называСмая стСком Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. Π­Ρ‚ΠΎΡ‚ стСк увСличиваСтся ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ срока слуТбы ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹; ΠΎΠ½ содСрТит ΠΏΠ°ΠΌΡΡ‚ΡŒ, которая, ΠΏΠΎ мнСнию компилятора, потрСбуСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Но Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ трСбуСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ компилятор Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ объСм памяти Π±ΡƒΠ΄Π΅Ρ‚ извСстСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΡ€ΠΈ Π΅Π΅ запускС. Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ памяти ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ управляСтся ΠΊΠ°ΠΊ ΠΊΡƒΡ‡Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ хранится ΠΏΠ°ΠΌΡΡ‚ΡŒ, динамичСски выдСляСмая ΠΈ освобоТдаСмая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ.

Когда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ большС памяти, ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ для ссылки Π½Π° Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΈΠ· ΠΊΡƒΡ‡ΠΈ. Π­Ρ‚ΠΎΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ становится для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ссылкой Π½Π° эту ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для копирования Π΅Π΅ содСрТимого ΠΈΠ»ΠΈ выполнСния Π»ΡŽΠ±Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. ПослС этого Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ (Ρ‚.Π΅. Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΅Π΅ Π² ΠΊΡƒΡ‡Ρƒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹). ПослС освобоТдСния памяти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° большС Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² Π½Π΅Π΅.

Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΠΌΠ΅Π½ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, ΠΏΠΎΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° остаСтся Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Π±Π»ΠΎΠΊΠΎΠ² памяти, прСдоставляСмых ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ. К соТалСнию, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ часто Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ сотни Π±Π»ΠΎΠΊΠΎΠ² памяти. ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ этих Π±Π»ΠΎΠΊΠΎΠ² памяти ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ с катастрофичСскими послСдствиями, Ссли Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ допустит ΠΎΡˆΠΈΠ±ΠΊΡƒ.

ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Π° — это распространСнная ошибка программирования, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСт запись Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π² строку), Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ памяти, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, ΠΈ пСрСзаписываСт сосСднюю ΠΏΠ°ΠΌΡΡ‚ΡŒ.ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Π°, происходящСС Π² ΠΊΡƒΡ‡Π΅, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Ρ‚Π°ΠΊ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Π° Π² стСкС. Однако, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π» Solar Designer Π² своСм сообщСнии Π² Π±Π»ΠΎΠ³Π΅, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

НСкоторыС программисты ΡΠΎΠ²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π΄Π²Π°ΠΆΠ΄Ρ‹ освобоТдая ΠΏΠ°ΠΌΡΡ‚ΡŒ (ошибки Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ освобоТдСния) ΠΈΠ»ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ освобоТдая Π΅Π΅ Π²ΠΎΠΎΠ±Ρ‰Π΅. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π΄Π²Π°ΠΆΠ΄Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒ, использовались ΠΊΠ°ΠΊ Π² Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½Ρ‹Ρ… условиях, Ρ‚Π°ΠΊ ΠΈ Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… условиях. ΠžΡ‚ΠΊΠ°Π· ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ особСнно опасным, Π½ΠΎ Π΄ΠΎΠ»Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, часто Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° доступная ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ исчСрпана.Π˜ΡΡ‡Π΅Ρ€ΠΏΠ°Π½ΠΈΠ΅ памяти ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ сбою этих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ запросы Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½Ρ‹.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ соврСмСнных языков программирования (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Java, C # ΠΈ Python) ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ограничивая использованиС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. Π₯отя это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ памяти, это Ρ‚Π°ΠΊΠΆΠ΅ устраняСт основной источник мощности ΠΈ гибкости этих языков программирования. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ трСбуСтся строгий ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ C ΠΈ C ++, нСсмотря Π½Π° ошибки управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто бСспокоят программистов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ эти языки, Π½Π΅ проявляя особой остороТности ΠΏΡ€ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ освобоТдСнии своих ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ.

МодСль владСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ

Π―Π·Ρ‹ΠΊ C ΠΈΠΌΠ΅Π΅Ρ‚ довольно простой Π½Π°Π±ΠΎΡ€ систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² для управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ систСмный Π²Ρ‹Π·ΠΎΠ² malloc () . И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊ памяти ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² систСму, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ систСмный Π²Ρ‹Π·ΠΎΠ² free () . Π’ C ++ Π΅ΡΡ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ для выдСлСния ΠΈ освобоТдСния динамичСской памяти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² new ΠΈ delete .

ΠŸΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ стоит слоТная Π·Π°Π΄Π°Ρ‡Π° — ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.Из уваТСния ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠΈΡˆΡƒΡ‚ свой собствСнный интСрфСйс ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ программирования (API) для управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ — ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡Π΅ΠΊ Π²ΠΎΠΊΡ€ΡƒΠ³ malloc () ΠΈ free () . Π Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ этих API ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ появлСнию Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ подсчСт ссылок ΠΈΠ»ΠΈ сборка мусора, для отслСТивания использования динамичСской памяти. МногиС Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Firefox, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько Ρ‚Π°ΠΊΠΈΡ… систСм для отслСТивания ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ.

Однако ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ систСматичСской схСмы для отслСТивания Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ программист «понял всС ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΒ». Наш ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ модСлью владСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌ собствСнной схСмы управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ.

МодСль владСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΏΡ€ΠΈΠ·Π²Π°Π½Π° ΠΏΠΎΠΌΠΎΡ‡ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ, ΠΎΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ этого Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚. Π­Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ статичСский Π°Π½Π°Π»ΠΈΠ· ΠΈ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ бСзопасности.МодСль владСния указатСлями раздСляСт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° «отвСтствСнныС» ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ «бСзотвСтствСнныС». Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², отвСтствСнный ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ освобоТдСн, Π° бСзотвСтствСнный ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ.

ВСория, лСТащая Π² основС нашСго исслСдования, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ссли всС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° отвСтствСнныС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ бСзотвСтствСнныС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ автоматичСски ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ отвСтствСнный ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ освобоТдСн, Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ бСзотвСтствСнный ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ освобоТдСн.Π­Ρ‚Ρƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²ΠΎ врСмя компиляции, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ.

Наш ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚

  • Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ рСализация ΠΌΠΎΠ΄Π΅Π»ΠΈ владСния динамичСски выдСляСмой ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ
  • Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ статичСского Π°Π½Π°Π»ΠΈΠ·Π° согласованности ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ исходного ΠΊΠΎΠ΄Π° C ΠΈ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ
  • ΠΎΡ†Π΅Π½ΠΊΠ° эффСктивности ΠΏΡƒΡ‚Π΅ΠΌ Π°Π½Π°Π»ΠΈΠ·Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ с извСстными ΠΈ скрытыми ошибками
  • ВрСбуСтся

  • ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ Π½Π° тысячу строк исходного ΠΊΠΎΠ΄Π° (KSLOC)

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ нашСй ΠΌΠΎΠ΄Π΅Π»ΠΈ владСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΌΡ‹ создаСм Π΄Π²Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: совСтник ΠΈ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ .Π‘ΠΎΠ²Π΅Ρ‚Π½ΠΈΠΊ Π±Π΅Ρ€Π΅Ρ‚ Ρ„Π°ΠΉΠ» с исходным ΠΊΠΎΠ΄ΠΎΠΌ C ΠΈ строит модСль владСния указатСлями, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ ΠΊΠΎΠ΄ΠΎΠΌ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, совСтник исслСдуСт ΠΊΠΎΠ΄ ΠΈ опрСдСляСт, ΠΊΠ°ΠΊΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ отвСтствСнны, Π° ΠΊΠ°ΠΊΠΈΠ΅ Π½Π΅Ρ‚. Если совСтник Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ статус отвСтствСнности указатСля, ΠΎΠ½ спросит ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·ΡΡ‚ΡŒ модСль ΠΈ исходный ΠΊΠΎΠ΄ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, соотвСтствуСт Π»ΠΈ ΠΊΠΎΠ΄ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Если ΠΊΠΎΠ΄ Π½Π΅ соотвСтствуСт ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π½ΠΎ сообщСниС ΠΎΠ± ошибкС.Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли отвСтствСнный ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ области видимости, Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ освобоТдаСтся.

Π‘ΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ — старая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΈ сущСствуСт мноТСство инструмСнтов, ΠΊΠ°ΠΊ бСсплатных, Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€ΠΎΠΏΡ€ΠΈΠ΅Ρ‚Π°Ρ€Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ программистам Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΅Π΅. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ инструмСнтов ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° памяти ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ динамичСский Π°Π½Π°Π»ΠΈΠ·. Они ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, отслСТивая использованиС Сю ΠΊΡƒΡ‡ΠΈ, ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, Ссли ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ ошибки памяти. Valgrind — ΠΎΠ΄ΠΈΠ½ ΠΈΠ· популярных ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠ² динамичСской памяти для систСм Linux.Π­Ρ‚ΠΈ инструмСнты Ρ‚ΠΎΡ‡Π½ΠΎ ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‚ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…; ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΈ ΡΠ½ΠΈΠΆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ поэтому Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² производствСнном ΠΊΠΎΠ΄Π΅.

НСкоторыС ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ статичСский Π°Π½Π°Π»ΠΈΠ·, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ВмСсто этого ΠΎΠ½ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ Π½Π΅ Π½Π°Π±Π»ΡŽΠ΄Π°ΡŽΡ‚ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ тСорСтичСски ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ошибки ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ, поэтому ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Ρ€Π°Π΄Π°Ρ‚ΡŒ ΠΎΡ‚ Π»ΠΎΠΆΠ½Ρ‹Ρ… срабатываний (сообщСниС ΠΎΠ± ошибкС Π² Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π°, Π³Π΄Π΅ Π½Π΅Ρ‚ ошибки) ΠΈ Π»ΠΎΠΆΠ½ΠΎΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² (Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ± ошибкС). ΠΏΡ€Π°Π²Π΄Π° ошибка Π² ΠΊΠΎΠ΄Π΅).Π›ΠΎΠΆΠ½ΠΎΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ» ΠΊΠΎΠ΄ ΠΈ убСдился, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ нуТдаСтся Π² измСнСниях, Π½ΠΎ Π»ΠΎΠΆΠ½ΠΎΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ свободным ΠΎΡ‚ ошибок, ΠΊΠΎΠ³Π΄Π° это Π½Π΅ Ρ‚Π°ΠΊ. Π›ΠΎΠΆΠ½ΠΎΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, Ρ‡Π΅ΠΌ Π»ΠΎΠΆΠ½Ρ‹Π΅ срабатывания, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ инструмСнты статичСского Π°Π½Π°Π»ΠΈΠ·Π° ΠΎΡˆΠΈΠ±Π°ΡŽΡ‚ΡΡ, сводя ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ Π»ΠΎΠΆΠ½ΠΎΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΡ€ΠΈ Π²Ρ‹Π΄Π°Ρ‡Π΅ большого количСства Π»ΠΎΠΆΠ½Ρ‹Ρ… срабатываний. И Coverity, ΠΈ Fortify ΡΠΎΠ·Π΄Π°ΡŽΡ‚ коммСрчСскиС инструмСнты статичСского Π°Π½Π°Π»ΠΈΠ·Π°, Π° Splint — это бСсплатный инструмСнт статичСского Π°Π½Π°Π»ΠΈΠ·Π°.

МодСль владСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ статичСский Π°Π½Π°Π»ΠΈΠ·, Π½ΠΎ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… инструмСнтов статичСского Π°Π½Π°Π»ΠΈΠ·Π°, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ сСмантичСской ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½Π΅ прСдоставляСмой Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ C.МодСль владСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ просто Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ отвСтствСнными, Π° ΠΊΠ°ΠΊΠΈΠ΅ — бСзотвСтствСнными. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, хотя Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°-ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚. Π­Ρ‚Π° сСмантичСская информация ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ модСль владСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π°Ρ‚ΡŒΡΡ Π»ΠΎΠΆΠ½Ρ‹ΠΌ срабатываниям ΠΈΠ»ΠΈ Π»ΠΎΠΆΠ½Ρ‹ΠΌ отрицаниям. БообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚, Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌΠΈ, ΠΈ ΠΎΠ½ Π½Π΅ пропустит Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ своСй ΠΌΠΎΠ΄Π΅Π»ΠΈ. И ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ динамичСский Π°Π½Π°Π»ΠΈΠ·, ΠΎΠ½ Π½Π΅ Π½Π°Π»Π°Π³Π°Π΅Ρ‚ ΡˆΡ‚Ρ€Π°Ρ„ΠΎΠ² Π²ΠΎ врСмя выполнСния.

БотрудничСство

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, я ΡΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‡Π°ΡŽ с Π›ΡƒΡ‚Ρ†Π΅ΠΌ Π’Ρ€Π°Π³Π΅, исслСдоватСлСм ΠΈΠ· ΠΎΡ‚Π΄Π΅Π»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ SEI. Π›ΡƒΡ‚Ρ† создаСт ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ C Intermediate Language (CIL). ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ создаСм, являСтся ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΈ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ языка C, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ прСдставлСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ C. По сути, это ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ шаг, выполняСмый компилятором. Но наша Ρ†Π΅Π»ΡŒ — Π½Π΅ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ компилятор; вмСсто этого Π½ΡƒΠΆΠ½ΠΎ провСсти ΡƒΠ³Π»ΡƒΠ±Π»Π΅Π½Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ C, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ соблюдСниС нашСй ΠΌΠΎΠ΄Π΅Π»ΠΈ.

ВлияниС Π½Π° DoD

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠœΠΈΠ½ΠΈΡΡ‚Π΅Ρ€ΡΡ‚Π²Ρƒ ΠΎΠ±ΠΎΡ€ΠΎΠ½Ρ‹ (DoD) Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ свои возмоТности с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ бСзопасного компилятора C. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ повлияСт Π½Π° стандарты языка C ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ коммСрчСских компиляторов. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ надССмся, Ρ‡Ρ‚ΠΎ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ прСдоставит подрядчикам DoD ΠΈ DoD Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡƒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ компиляции.

Π£Ρ‡Π΅Ρ‚ второстСпСнных случаСв ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ

ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ нСсколько ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.Одна ΠΈΠ· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ достаточно своСврСмСнного ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, прСимущСства ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π²Π΅ΡˆΠΈΠ²Π°ΡŽΡ‚ усилия программиста. ИсслСдованиС Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΈΠ·ΠΊΠΈΠ΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΈ Π½ΠΈΠ·ΠΊΠΈΠ΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния.

Одна ΠΈΠ· самых слоТных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΈ создании любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ — это ΠΊΡ€Π°ΠΉΠ½ΠΈΠ΅ случаи, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π±ΡƒΠ΄ΡƒΡ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π½Π΅ ΡƒΡ‡Π»ΠΈ. Π―Π·Ρ‹ΠΊ C слоТСн ΠΈ содСрТит конструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ расстроят Π½Π°ΡˆΡƒ модСль. НапримСр, наша тСкущая модСль Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ массивы отвСтствСнных ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, поэтому ΠΌΡ‹ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅ΠΌ ΠΈΡ… использованиС ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π² массивС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π±Ρ‹Π»ΠΈ бСзотвСтствСнными.Π—Π°ΠΏΡ€Π΅Ρ‚ Π½Π° использованиС массивов отвСтствСнных ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ сохраняСт модСль Π½Π΅ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²ΠΎΠΉ ΠΈ простой, Π½ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π΅Π΅ удобство использования. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ будущая Ρ†Π΅Π»ΡŒ этого исслСдования — Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ модСль для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ массивов отвСтствСнных ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π£ нас Π΅ΡΡ‚ΡŒ нСсколько Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ нашСго Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ Π΅Π³ΠΎ построим. НСкоторыС ΠΈΠ· этих ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΊΠΎΠ΄Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ согласованной ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‚ Π΅Π΅. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π΄Π°Ρ‚ΡŒ сообщСниС ΠΎΠ± ошибкС ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· этих Π½Π΅ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ истинноС влияниС ΠΊΡ€Π°ΠΉΠ½ΠΈΡ… случаСв Π½Π° наши исслСдования.

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ нашСй Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΈΠ³Ρ€ΡƒΡˆΠ΅Ρ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΊΠΎΠ΄Π° ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ΄Π½Π° ΠΈΠ· Ρ†Π΅Π»Π΅ΠΉ нашСго исслСдования — ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ модСль управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Π° ΠΊΠ°ΠΊΠΈΠ΅ Π½Π΅Ρ‚. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ послСднСго ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ подходящий тСстовый ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для ΠΌΠΎΠ΄Π΅Π»ΠΈ владСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ.

Π‘ΡƒΠ΄ΡƒΡ‰ΠΈΠ΅ исслСдования

Наши Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ исслСдования ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ наша модСль владСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ Π½Π° C, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Π΅ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ модСль владСния. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ модСль нСсколькими способами, Π² Ρ‚ΠΎΠΌ числС

  • ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° массивов отвСтствСнных ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ
  • ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° C ++

Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… исслСдований.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы

Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ бСзопасного кодирования CERT посСтитС сайт
https: // www.sei.cmu.edu/research-capabilities/all-work/display.cfm?customel_datapageid_4050=21274.

РаспрСдСлСниС динамичСской памяти Π² C — malloc (), calloc (), realloc () ΠΈ free ()

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ массив Π΄Π»ΠΈΠ½ΠΎΠΉ 5 с ΠΈΠΌΠ΅Π½Π΅ΠΌ a, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅
Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π»ΠΈΠ½Π° массива (5) фиксирована здСсь. Но Ρ‡Ρ‚ΠΎ, Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π² зависимости ΠΎΡ‚ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²? Π­Ρ‚ΠΎ вСдь Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ?

Π—Π΄Π΅ΡΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ идСя динамичСского распрСдСлСния памяти, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅, Π² соотвСтствии с нашими потрСбностями ΠΈ Π² любоС врСмя.

Π’ случаС статичСского распрСдСлСния памяти Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСдостатки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ бСсполСзная Ρ‚Ρ€Π°Ρ‚Π° памяти, мСньшая Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ, постоянноС распрСдСлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ‚. Π”. Для прСодолСния этих ситуаций Π±Ρ‹Π»Π° Π²Π²Π΅Π΄Π΅Π½Π° концСпция динамичСского распрСдСлСния памяти. ΠŸΡ€ΠΈ динамичСском распрСдСлСнии памяти ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ динамичСски Π²ΠΎ врСмя выполнСния.

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° выдСлСния памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° Π²ΠΎ врСмя выполнСния, называСтся Dynamic Memory Allocation (DMA).

Для использования динамичСского распрСдСлСния памяти Π½Π° языкС C Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² наш ΠΊΠΎΠ΄ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ( stdlib.h ).

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° прямого доступа ΠΊ памяти?

1. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ станСт Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ.

2. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ статичСского выдСлСния памяти, Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Π²ΠΎ врСмя выполнСния).

3. Π­Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивно, Ρ‡Π΅ΠΌ статичСскоС распрСдСлСниС памяти.

4. БущСствуСт Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ Π² ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ использовании памяти, ΠΏΡ€ΠΈ нСобходимости ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ освобоТдСна.

Π•ΡΡ‚ΡŒ 4 Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ описаны Π² stdlib.h :

1. malloc ()
2. calloc ()
3. realloc ()
4. free ()

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ рассмотрим ΠΈΡ…. .

1. malloc () : Для динамичСского распрСдСлСния памяти ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая называСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ malloc (). Ѐункция malloc () Π² случаС успСха Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ адрСс Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ памяти, Π² случаС ошибки ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ значСниС… ( ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ )

2. calloc () : Для динамичСского распрСдСлСния памяти ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая называСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ calloc (). Ѐункция calloc () Π² случаС успСха Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ адрСс массива, ΠΈ каТдая ячСйка памяти Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0… ( ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ )

3. realloc () : Π²ΠΎ врСмя выдСлСния памяти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ calloc ( ) ΠΈΠ»ΠΈ malloc (), Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, памяти слишком ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ нСдостаточно. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π²ΠΎ врСмя выполнСния… ( ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ )

4. free () : ΠΌΠ΅Ρ‚ΠΎΠ΄ free () Π² C ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для динамичСского освобоТдСния памяти . Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ памяти, освобоТдая СС… ( ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ )


Π‘Π»Π΅Π΄ΡƒΠΉΡ‚Π΅ Π·Π° Π½Π°ΠΌΠΈ


Π’Ρ‹ пропустили

  • LnT Recruitment Drive 2021 | Π˜Π½ΠΆΠ΅Π½Π΅Ρ€-программист | Codewindow.in
  • BNY Mellon Off Campus Drive 2021 | Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния | Codewindow.in
  • Amdocs Off Campus Recruitment Drive 2021 | Ассоциированный выпускник ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΈ | Окно ΠΊΠΎΠ΄Π°.in
  • Wipro Elite NTH 2022 НаСм | Codewindow.in
  • IBM Off Campus Recruitment Drive | Младший ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€-программист | Codewindow.in
  • ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½ΠΎΠ΅ собСсСдованиС II | Codewindow.in
  • ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Java для ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ
  • ZOHO НаСм Π²Π½Π΅ кампуса | Frontend-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ | Codewindow.in
  • Π—Π°Ρ‰ΠΈΡ‰Π΅Π½ΠΎ: Sticky Notes
  • Индия БСгодня РСкрутинговая кампания | Π˜Π½ΠΆΠ΅Π½Π΅Ρ€-программист | Окно ΠΊΠΎΠ΄Π°.in
  • Вопросы для собСсСдования ΠΏΠΎ Python | Π’Π·Π»ΠΎΠΌΠ°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ CodeWindow | Codewindow.in
  • ΠžΠΏΡ‹Ρ‚ собСсСдования с ниндзя TCS
  • НаСм сотрудников Π²Π½Π΅ кампуса Cisco 2022 | Π˜Π½ΠΆΠ΅Π½Π΅Ρ€-программист | Codewindow.in
  • Cognizant Off Campus Drive 2021 | ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚-Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊ | Codewindow.in |
  • Amdocs Off Campus Drive 2021 | Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния | Окно ΠΊΠΎΠ΄Π°.Π²
  • Accenture Hiring
  • IBM Off Campus Drive 2021 | УправлСнчСскиС Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΡŽ ΠΈ ИИ | Codewindow.in
  • Microchip Off Campus НаСм 2021 | Π˜Π½ΠΆΠ΅Π½Π΅Ρ€-программист | Codewindow.in
  • Genesys Off Campus Hiring Fresher | Π˜Π½ΠΆΠ΅Π½Π΅Ρ€-программист | Codewindow.in
  • Zoho НаСм Π²Π½Π΅ кампуса 2021 | Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния | Codewindow.in
  • Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ для ΠΏΡ€ΠΈΠ΅ΠΌΠ° Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ ниндзя TCS
  • НаСм сотрудников Π²Π½Π΅ кампуса Π² Microsoft | Π˜Π½ΠΆΠ΅Π½Π΅Ρ€-программист | ΠŸΠΎΠ»Π½Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ дСнь | Окно ΠΊΠΎΠ΄Π°.in
  • GlobalLogic Recruitment Drive | Младший Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊ | Codewindow.in
  • Atos Syntel НаСм Π²Π½Π΅ кампуса | Π˜Π½ΠΆΠ΅Π½Π΅Ρ€-программист | Codewindow.in
  • Массив JAVA
  • Adobe Off Campus Recruitment Drive | Π˜Π½ΠΆΠ΅Π½Π΅Ρ€ ΠΏΠΎ качСству ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния | Codewindow.in
  • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π°Π±ΠΎΡ€Π° пСрсонала JPMorgan Chase and Co. | Π˜Π½ΠΆΠ΅Π½Π΅Ρ€-программист | Codewindow.in
  • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Mindtree EDGE | ΠŸΡ€ΠΈΠ·Ρ‹Π² Mindtree ΠΏΠΎ Π½Π°Π±ΠΎΡ€Ρƒ пСрсонала | Окно ΠΊΠΎΠ΄Π°.in
  • ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΏΡ€ΠΈΠ΅ΠΌΠ° Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ Cognizant 2021 | ΠŸΠΎΠ·Π½Π°ΡŽΡ‰ΠΈΠΉ Π³ΠΈΠ΄ | Π’Π°ΠΆΠ½Ρ‹Π΅ новости ΠΎΡ‚ Cognizant | Codewindow.in
  • TCS Ninja Найм для ΠΏΠ°Ρ€Ρ‚ΠΈΠΈ 2022 | Codewindow.in
  • Renault Nissan Technology Найм Π”Ρ€Π°ΠΉΠ² | Π˜Π½ΠΆΠ΅Π½Π΅Ρ€-стаТСр | Codewindow.in
  • Columbus Global Hiring | БистСмный ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚-стаТСр | Codewindow.in

Π’Π°ΠΊΠΆΠ΅ Checkout


ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ исходного ΠΊΠΎΠ΄Π° для Π½Π°ΡˆΠΈΡ… ΡƒΡ‡Π΅Π±Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π²Π΅Π±-Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΠ· ΡƒΡ‡Π΅Π±Π½ΠΎΠ³ΠΎ курса Well House Consultants
ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… Π²Π΅Π±-Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ [ссылка]

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄: ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹.txt ΠœΠΎΠ΄ΡƒΠ»ΡŒ: A100

Π­Ρ‚Π° страница являСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ — Π²Ρ‹ запустили сцСнарий Β«ΠŸΡ€ΠΈΠΌΠ΅Ρ€ исходного ΠΊΠΎΠ΄Π°
Β» Π½Π° Π²Π΅Π±-сайтС Well House Consultants, Π½ΠΎ
Π²Ρ‹ Π½Π΅ сказали Π½Π°ΠΌ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ссылкам
, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€
, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΈΡ‰Π΅Ρ‚Π΅.

Π£Π·Π½Π°Ρ‚ΡŒ ΠΎΠ± этом ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π΅

Книги ΠΏΠΎ этой Ρ‚Π΅ΠΌΠ΅

Π΄Π°. Π’ нашСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π±ΠΎΠ»Π΅Π΅ 700 ΠΊΠ½ΠΈΠ³. Книги
ΠŸΡ€ΠΈΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Π»Π°ΠΌΠΏΡ‹ пСрСчислСны здСсь, ΠΈ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ
ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ ΠΌΡ‹ свяТСм вас с Amazon для Π·Π°ΠΊΠ°Π·Π°.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ взят ΠΈΠ· нашСго ΡƒΡ‡Π΅Π±Π½ΠΎΠ³ΠΎ модуля Β«ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π²Π΅Π±-Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΒ». Π’Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ описаниС Ρ‚Π΅ΠΌΡ‹ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅
Π΄Ρ€ΡƒΠ³ΠΈΠ΅ тСсно связанныС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π° индСксной страницС модуля Β«ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π²Π΅Π±-Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΒ».

ПолноС описаниС исходного ΠΊΠΎΠ΄Π°

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎΠ± этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π° ΡƒΡ‡Π΅Π±Π½Ρ‹Ρ… курсах, пСрСчислСнных Π½Π° этой страницС,
Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… Π·Π°ΠΌΠ΅Ρ‚ΠΎΠΊ.

МногиС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡƒΡ‡Π΅Π±Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ доступны для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (для ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ использования) с
наш Ρ†Π΅Π½Ρ‚Ρ€ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΠΎΠ΄
ЛицСнзия Open Training Notes.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ рСсурсы

β€’ Π’ нашСм Ρ†Π΅Π½Ρ‚Ρ€Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π΅ΡΡ‚ΡŒ ряд Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… тСхничСских статСй.
β€’ Π’ нашСм Π°Ρ€Ρ…ΠΈΠ²Π΅ Ρ„ΠΎΡ€ΡƒΠΌΠΎΠ² Opentalk Π΅ΡΡ‚ΡŒ Ρ†Π΅Π½Ρ‚Ρ€ вопросов ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ².
β€’ Π›ΠΎΡˆΠ°Π΄ΠΈΠ½Ρ‹ΠΉ Ρ€ΠΎΡ‚ Π΄Π°Π΅Ρ‚ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½Ρ‹ΠΉ совСт ΠΈΠ»ΠΈ ΠΌΡ‹ΡΠ»ΡŒ.
β€’ Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы доступны Ρ‡Π΅Ρ€Π΅Π· рСсурсный Ρ†Π΅Π½Ρ‚Ρ€.
β€’ ВсС эти рСсурсы ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ нашСй поисковой систСмы
.
β€’ И здСсь Π΅ΡΡ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ индСкс.

НазначСниС этого сайта

Π­Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·Π΅Ρ† ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, дСмонстрация класса ΠΈΠ»ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‚
ΡƒΡ‡Π΅Π±Π½Ρ‹ΠΉ курс.Π­Ρ‚ΠΎ основная Ρ†Π΅Π»ΡŒ
Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² прСдоставлСнии послСкурсовых услуг ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ посСщали наши
общСствСнноС частноС ΠΈΠ»ΠΈ
Π½Π° сайтС курсы, Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ сдСланы
ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ доступны ΠΏΡ€ΠΈ условиях, описанных Π½ΠΈΠΆΠ΅.

Автор Π²Π΅Π±-сайта

Π­Ρ‚ΠΎΡ‚ Π²Π΅Π±-сайт написан ΠΈ поддСрТиваСтся
ΠšΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚Ρ‹ Well House.

Условия использования

ΠŸΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΠ΅ участники Π½Π°ΡˆΠΈΡ… ΡƒΡ‡Π΅Π±Π½Ρ‹Ρ… курсов ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅
ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π² процСссС ΠΈΡ… программирования, Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ
ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ подходят для ΠΈΡ…
Ρ€Π°Π±ΠΎΡ‚Π°.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *