Выделение и освобождение динамической памяти в Си

Поділитися
Вставка
  • Опубліковано 24 гру 2024

КОМЕНТАРІ • 127

  • @Dr.Esperanto
    @Dr.Esperanto 2 роки тому +7

    Под последним Вашим видео отключены комментарии, по этому пишут тут.
    Хотел выразить свою поддержку и сказать огромное спасибо за работу.

  • @maxk-ff6575
    @maxk-ff6575 6 років тому +14

    спасибо за уроки, сначала хотел уточнить одну деталь, но вопрос снялся при просмотре других лекций.

    • @xeither289
      @xeither289 Рік тому

      GOD JESUS TOLD US TO LOVE GOD AND TO LOVE ONE ANOTHER! LET'S NOT DESTROY THIS WORLD! NO WAR!!! БОГ СОЗДАЛ ТАКОЙ ПРЕКРАСНЫЙ МИР! НЕ БУДЕМ РАЗРУШАТЬ МИР! ПОЛЮБИМ БОГА И ВСЕХ ЛЮДЕЙ! НЕТ ВОЙНЕ!!

  • @bishop_ru6767
    @bishop_ru6767 4 роки тому +8

    Благодарю за лекцию + с уважением, Евген.

  • @recreationreally4382
    @recreationreally4382 5 років тому +19

    1. Можно накладные расходы показать: на выделение и высвобождение памяти, и попутно на пустые циклы.
    2. Не хватает функций realloc и memset.
    3. Можно сравнить время доступа при работе с памятью, выделенной большими блоками и маленькими.

    • @xeither289
      @xeither289 Рік тому

      GOD JESUS TOLD US TO LOVE GOD AND TO LOVE ONE ANOTHER! LET'S NOT DESTROY THIS WORLD! NO WAR!!! БОГ СОЗДАЛ ТАКОЙ ПРЕКРАСНЫЙ МИР! НЕ БУДЕМ РАЗРУШАТЬ МИР! ПОЛЮБИМ БОГА И ВСЕХ ЛЮДЕЙ! НЕТ ВОЙНЕ!!

  • @RevernBlitz
    @RevernBlitz 5 років тому +221

    Я так понял мне даже ОС не даст😢

    • @АлексейШутко
      @АлексейШутко 3 роки тому

      Проси ПЧЁЛ...

    • @xeither289
      @xeither289 Рік тому

      GOD JESUS TOLD US TO LOVE GOD AND TO LOVE ONE ANOTHER! LET'S NOT DESTROY THIS WORLD! NO WAR!!! БОГ СОЗДАЛ ТАКОЙ ПРЕКРАСНЫЙ МИР! НЕ БУДЕМ РАЗРУШАТЬ МИР! ПОЛЮБИМ БОГА И ВСЕХ ЛЮДЕЙ! НЕТ ВОЙНЕ!!

    • @alienhazzard7201
      @alienhazzard7201 Місяць тому

      @xeither289
      пнх

    • @user-qaplwso7
      @user-qaplwso7 12 днів тому

      ну шо тебе дали?

  • @РушанМ-я6ъ
    @РушанМ-я6ъ 4 роки тому +3

    Только благодаря вам узнал про мебибайты и кибибайты.. Спасибо!

    • @melkorbsd
      @melkorbsd Рік тому +3

      Кибибайты были введены относительно недавно, в 1998 году, до этого у программистах не возникало проблем использовать разные приставки "кило" и "мега" в программировании и физике:) А потом им вдруг сложно стало.

    • @fish9370
      @fish9370 5 місяців тому

      Бред полный

  • @v_chelnik
    @v_chelnik 2 роки тому +3

    Спасибо вам, Тимофей, из школы 21!

  • @jhonlauder2736
    @jhonlauder2736 Рік тому +2

    Тимофей, благодарю за искусно преподнесённый контент!
    Очень наглядно и с примерами.
    Эксперименты над железом... Прикольно, что при k

    • @xeither289
      @xeither289 Рік тому

      GOD JESUS TOLD US TO LOVE GOD AND TO LOVE ONE ANOTHER! LET'S NOT DESTROY THIS WORLD! NO WAR!!! БОГ СОЗДАЛ ТАКОЙ ПРЕКРАСНЫЙ МИР! НЕ БУДЕМ РАЗРУШАТЬ МИР! ПОЛЮБИМ БОГА И ВСЕХ ЛЮДЕЙ! НЕТ ВОЙНЕ!!

  • @v_chelnik
    @v_chelnik Рік тому +1

    Все уроки топ! в свое время сильно помогли

    • @xeither289
      @xeither289 Рік тому +1

      GOD JESUS TOLD US TO LOVE GOD AND TO LOVE ONE ANOTHER! LET'S NOT DESTROY THIS WORLD! NO WAR!!! БОГ СОЗДАЛ ТАКОЙ ПРЕКРАСНЫЙ МИР! НЕ БУДЕМ РАЗРУШАТЬ МИР! ПОЛЮБИМ БОГА И ВСЕХ ЛЮДЕЙ! НЕТ ВОЙНЕ!!

  • @vasily2dndn
    @vasily2dndn 5 місяців тому

    Спасибо за урок, легенда второго номера егэ по информатике😅

  • @kovesik
    @kovesik 5 років тому +7

    Ворнинга на 6:00 нет потому что Си неявно преобразует указатели.

  • @gamingplay5415
    @gamingplay5415 2 роки тому +1

    Интересная подача информации👍😃

    • @xeither289
      @xeither289 Рік тому

      GOD JESUS TOLD US TO LOVE GOD AND TO LOVE ONE ANOTHER! LET'S NOT DESTROY THIS WORLD! NO WAR!!! БОГ СОЗДАЛ ТАКОЙ ПРЕКРАСНЫЙ МИР! НЕ БУДЕМ РАЗРУШАТЬ МИР! ПОЛЮБИМ БОГА И ВСЕХ ЛЮДЕЙ! НЕТ ВОЙНЕ!!

  • @popopopo8317
    @popopopo8317 3 роки тому +1

    Отлично объясняете)

  • @w_ey_x_a_demonyonoc_EK58
    @w_ey_x_a_demonyonoc_EK58 Рік тому +1

    отличный урок😍👍

  • @artofbarto
    @artofbarto 3 роки тому +1

    крутой препод, спасибо!

  • @ImmortalBest
    @ImmortalBest 6 років тому +43

    16Гб ОЗУ ) я думал там ведро с 2Гб и Core2Duo ))нормальная тачка, можно в Unity или Unreal творить ништяки

  • @juvusart
    @juvusart 5 років тому +53

    Когда мне особенно грустно, я запускаю ideшку, и прописываю аллокацию какого-то куска памяти...просто так. Сразу после этого чуствуешь, что с си ты творец, ты всемогущ, тебя никто не сможет победить....

    • @batfist6595
      @batfist6595 5 років тому +21

      Ты можешь повелевать оперативкой. Своими пальцами, ты прикинь. Ты управляешь информацией так, как тебе угодно. Ты бог оперативки

    • @nickjonas8257
      @nickjonas8257 4 роки тому +4

      Питонисты хором скажут: НООООООУ

    • @tocvb232
      @tocvb232 3 роки тому +1

      @@nickjonas8257 ну ты до строк в си дойдёшь, так же завопишь. Да и вообще питон не для этого делали... (мимо, начал программировать в си и чуть-чуть покодил в питоне)

    • @xeither289
      @xeither289 Рік тому

      GOD JESUS TOLD US TO LOVE GOD AND TO LOVE ONE ANOTHER! LET'S NOT DESTROY THIS WORLD! NO WAR!!! БОГ СОЗДАЛ ТАКОЙ ПРЕКРАСНЫЙ МИР! НЕ БУДЕМ РАЗРУШАТЬ МИР! ПОЛЮБИМ БОГА И ВСЕХ ЛЮДЕЙ! НЕТ ВОЙНЕ!!

    • @xeither289
      @xeither289 Рік тому

      @@batfist6595 GOD JESUS TOLD US TO LOVE GOD AND TO LOVE ONE ANOTHER! LET'S NOT DESTROY THIS WORLD! NO WAR!!! БОГ СОЗДАЛ ТАКОЙ ПРЕКРАСНЫЙ МИР! НЕ БУДЕМ РАЗРУШАТЬ МИР! ПОЛЮБИМ БОГА И ВСЕХ ЛЮДЕЙ! НЕТ ВОЙНЕ!!

  • @vladimir_khlghatyan
    @vladimir_khlghatyan 3 роки тому

    Спасибо Тимофей!

  • @tacowilco7515
    @tacowilco7515 5 років тому +34

    10:21 "OS didn't give ..."

  • @konstantinmyshov1388
    @konstantinmyshov1388 4 роки тому +9

    Объявление массива в виде
    int N;
    scanf("%d", &N);
    char A[N];
    это фича GCC. Стандарт этого делать не позволяет. Размер массива должен быть вычислен на этапе компиляции.

    • @AspireM3400
      @AspireM3400 3 роки тому

      Не обязательно GCC. Если в компиляторе есть поддержка VLA, то пропустит, нет - матюкнется. А для GCC есть флаг, запрещающий использование подобных массивов (-Werror=vla).

    • @КириллГусарев-р5х
      @КириллГусарев-р5х 2 роки тому

      VLA есть в стандарте, так что всё ок)

  • @michaeljordan1283
    @michaeljordan1283 2 роки тому +2

    7:50 память возвращается системе - без функции free()?

  • @truebrostory5723
    @truebrostory5723 3 роки тому

    Лучший!

  • @MaxPV1981
    @MaxPV1981 Рік тому +1

    Тимофей, вопрос по 26 минуте:
    - Всё же указатели можно сравнивать, как я понимаю - просто бессмысленно в свете предполагаемой цели, так как даст некорректные значения?
    Разве нельзя придумать задачу, по которой нужно сравнивать именно указатели из разных областей памяти - ну, исследует человек пространство памяти, что такого? :)

  • @yuliyacher67
    @yuliyacher67 2 роки тому

    Спасибо!

  • @АлексейАлексеев-ц8х9т

    Тимофей, с did используется глагол в форме инфинитива, didn't gAve - неправильно.

    • @nicholasspezza9449
      @nicholasspezza9449 11 місяців тому +2

      в данном случае "неправильно" должно писаться слитно, грамотей 🐒

    • @АлексейАлексеев-ц8х9т
      @АлексейАлексеев-ц8х9т 11 місяців тому +1

      @@nicholasspezza9449 благодарю за ликбез. Исправил

  • @frivolouselm7529
    @frivolouselm7529 4 роки тому +5

    на 17:55 int *A = (char *)malloc(N * sizeoff(int)) разве тип пойнтера и тип вывода функции malloc не должны совпадать? Разве не должно быть int *A = (int*)malloc(N * sizeoff(int)) ?

  • @fish9370
    @fish9370 5 місяців тому

    6:02, Коллега, ну как можно так ошибаться? Ну конечно в Си указатель void автоматически приводится к заданному типу. Стыдно такое не знать. Обычно этим грешат разработчики на С++

  • @RG-sj1jb
    @RG-sj1jb 2 роки тому +1

    Спасибо за лекцию! Вопрос: после освобождения памяти free(A) мы же не сможем обращаться к массиву? зачем тогда освобождать, если нельзя продолжить работу с массивом?

    • @semyonarteev3100
      @semyonarteev3100 2 роки тому

      чтобы он не занимал память процесса

  • @learpcss9569
    @learpcss9569 4 роки тому +1

    вопрос. Вы вводили в переменную N громадные значения. должно же быть переполнение по идее? и будет запрос на выделение памяти от отрицательного количества бит. какое вообще поведение будет у malloc? мне не совсем понятно.

    • @ТопКекич1996
      @ТопКекич1996 4 роки тому

      Непонятно? так проверь ёпта

    • @learpcss9569
      @learpcss9569 4 роки тому

      @@ТопКекич1996 ок, результаты через час.

    • @linterrupt
      @linterrupt 4 роки тому

      @@learpcss9569 понимаю, что не актуально. но int вмешает обычно 4 000 000 000. А он запихивал 2 000 000 000

    • @7qim
      @7qim 3 роки тому +3

      @@linterrupt Это если он *_unsigned_*_ int,_
      а просто _int_ это на самом деле *_signed_*_ int,_ то есть вмещать может не 0...4,2 млрд, а -2,1...2,1 млрд.

  • @ДмитрийАндреев-ф3х

    А почему в начале видео не используется free( ) для освобождения памяти?

  • @ИванЖарский-к9э
    @ИванЖарский-к9э 5 років тому +3

    А что насчет realloc'a?

  • @Mani_Fast
    @Mani_Fast 2 роки тому +1

    спасибо особо интересно было, я вот тут побаловался и увидел как график постепенно растет если добавить задержу и увеличивать размер массива.
    #include
    #include
    #include
    int main(void)
    {
    int N = 10;
    printf("Enter size of array to create: ");
    //scanf("%d", &N);
    while (1)
    {
    int *A = (int*)malloc(N*sizeof(int));
    //int *A = (int*)calloc(N, sizeof(int)); 0
    if (A == NULL)
    {
    printf("OS not gave mamory. Exit...
    "); exit(1);
    }
    for (int i = 0; i < N; i++)
    {
    A[i] = i;
    }
    printf("Array successefully created!
    ");
    N+=10;
    Sleep(1);
    //free(A);
    }
    printf("\tArrays successefully created!
    ");
    system("pause"); return 0;
    }
    а если убрать задержку то видно как он резко взлетает как квадратичная функция

  • @UCanDo
    @UCanDo 4 роки тому +1

    Спасибо за лекцию!
    Подскажите, а в чем существенное отличие, если я объявлю глобальную переменную и изменю ее в функции и передачей адреса переменно для функции? В чем отличие?

    • @КириллГусарев-р5х
      @КириллГусарев-р5х 2 роки тому

      В реальном мире ты никогда не сможешь заюзать "глобальную" переменную для этого.

    • @trigeminalneuralgia9889
      @trigeminalneuralgia9889 Рік тому

      скорость, во-первых, во-вторых, функции типа void не могут что-либо менять без указателя,
      void change_number(int number)
      {
      number *= 2;
      }
      int main(void)
      {
      int x = 666;
      change_number(x); // ничего не делает
      return 0;
      }

  • @kirillshvedov8417
    @kirillshvedov8417 4 роки тому

    Ну чтоб подождать))
    3:17

  • @alexs7952
    @alexs7952 2 роки тому +5

    OS didn't gave memory - неправильно. Правильно didn't give.

    • @nightwitch698
      @nightwitch698 3 місяці тому

      а "Array successfully created" не смутило?))

  • @AnonIm-if3cw
    @AnonIm-if3cw 4 роки тому +7

    int *A = (char *)malloc(N*sizeof(int)) - я один заметил, что там (char *) лишний🤔

    • @polinakononova8453
      @polinakononova8453 3 роки тому

      int* должно быть, если правильно понимаю

  • @roman6572
    @roman6572 Рік тому

    Норм то, что там где выделяем память, при водим void* к char* и присваиваем переменной int*?

  • @ИринаИрина-ш5ы7р
    @ИринаИрина-ш5ы7р 11 місяців тому +1

    А правда ли,что в си++ можно не парится за утечку памяти из кучи?Там всё происходит почти автоматически(библиотека stl).И нет необходимости следить за каждым шагом работы с динамической памятью?

    • @alienhazzard7201
      @alienhazzard7201 Місяць тому +1

      @ИринаИрина-ш5ы7р
      Неправда.

  • @keycimag3316
    @keycimag3316 5 років тому +2

    А почему при обьявлении массива ( без маллока) память выделяется в стеке?? Почему не в куче?

    • @NG-gz9ly
      @NG-gz9ly 5 років тому +1

      От языка зависит , в Java только в heap выделяется , и поэтому программы на яве медленне , а на С/C++ быстрые!

    • @batfist6595
      @batfist6595 5 років тому

      @@NG-gz9ly То есть стек быстрее кучи? То есть, затем нужно объявлять сложные гуи-объекты в стеке? Ради оптимизации? Я познаю дзен

    • @NG-gz9ly
      @NG-gz9ly 5 років тому

      @@batfist6595 Нашел время для коммента

    • @batfist6595
      @batfist6595 5 років тому +1

      @@NG-gz9ly 2:30 время учиться)

    • @NG-gz9ly
      @NG-gz9ly 5 років тому

      @@batfist6595 Знаешь в ютубе есть чел Winderton , у него плйлист основы программ-ния там все про это говорится

  • @kirillshvedov8417
    @kirillshvedov8417 4 роки тому +2

    15:36

  • @jojomajo
    @jojomajo 4 роки тому +1

    Она постоянно не даёт, что-то вечно растет и падает, система не выдерживает выдает ошибки, все прям как в жизни)

  • @igorseledtsov7345
    @igorseledtsov7345 Рік тому

    маллос вообще-то по документации, выделяет не память, а адресное пространство...
    а память может выделять а может и не выделять.. зависит от операционки

  • @Ирина-ш1ц3ъ
    @Ирина-ш1ц3ъ 3 роки тому

    😎😎😎😎

  • @kirillshvedov8417
    @kirillshvedov8417 4 роки тому +1

    Зато честно: 0:31 - 0:38

  • @greenman8625
    @greenman8625 4 роки тому +19

    Оп! Не дала! (с) 😅

  • @misana77
    @misana77 6 років тому +15

    sizeof - это оператор, а не функция

    • @tkhirianov
      @tkhirianov  6 років тому +33

      Вы правы. Просто меня учили, что это "функция, вычисляемая в момент компиляции", а по первоисточникам я не могу всю терминологию проверять. К счастью, это не меняет сути дела.
      На будущее учту вашу поправку.

  • @irakligagnidze5200
    @irakligagnidze5200 2 роки тому

    Почему массив A не объявлен, как он работает без объявления

  • @МаксимКоновалов-ь4ж

    игрался с malloc и ставил совершенно безумные цифры. Память на удивление выделялась, но как и почему?

    • @alexanderkhoroshavin6921
      @alexanderkhoroshavin6921 4 роки тому

      Какие цифры?

    • @DD0S2
      @DD0S2 4 роки тому

      ОС может отказать и без ошибки , понять или выделила можно через оператор выбора

  • @allex6829
    @allex6829 2 роки тому

    В какой то момент моя память просто не захотела отказываться, и продолжила выделять

  • @alexanderm6862
    @alexanderm6862 4 роки тому +4

    Просящему даётся, с операционной системой как с женщиной

    • @the_byte.
      @the_byte. 3 роки тому

      да, в чём-то они похожи..

  • @arsenyi9696
    @arsenyi9696 10 місяців тому

    13:00 - уважаемый учитель, раньше верно учили, это сейчас в образовании хаос и бардак. ВНИМАНИЕ! Не путайте людей! Один килобайт - 1(kB) = 1024 (B) Байт, один мегабайт - 1 (MB) = 1024 (kB) = 1048576 (B). А этот ваш кибибайт (kiB): 1 (kiB) = 1000 (B) - просто упрощение для (тупых) масс пользователей которых в школе учили что 1 килограмм = 1000 грамм, 1 (км) = 1000 (м)... , а тут на тебе 1 (kB) = 1024 (B). К тому же это оказалось выгодно продавцам памяти и флеш накопителей, чтобы можно было как с продовольственными товарами продавать пачку сока/молока не 1 литр, а 900 мл, 850 мл... ПО ПРЕЖНЕЙ ЦЕНЕ одного литра. Короче и капиталисты/волки сыты (ненадолго) и тупые овцы/потребители без когнитивных диссонансов. Это я вам тут как опытный программист старой школы написал, не ради критики, а на пользу истинным знаниям.

    • @call_nick
      @call_nick 8 місяців тому

      Тоже так думал, пока на Википедию не залез. Видимо зависит от того, какой стандарт дает определение для килобайта и кибибайта.

  • @nicholasspezza9449
    @nicholasspezza9449 11 місяців тому

    3 дня Тимофей комп не выключал к моменту записи видео. 🧐

  • @linterrupt
    @linterrupt 4 роки тому +6

    Настоящее горе, это не когда девушка не дает.
    Настоящее горе, это когда ОC не дает

  • @user-apostata
    @user-apostata 3 роки тому +1

    врёте, когда я учился в школе такой, киби чуши, не было. вики говорит, что эту дурь придумали в 1999. а до этого 40 лет, все и так понимали друг друга

    • @AV1ch
      @AV1ch 3 роки тому

      Более того, до сих пор понимают.

  • @dimalink4486
    @dimalink4486 Рік тому

    Дима умный! Дима почти закончил этот курс молодого бойца. Для школьников. Следуюбщий урок для меня последний. Почти!! Что то Дим знал. Что то нет. Я вот к прмиеру не пользуюст ПРИНТФ и СКАНФ у меня СТД ИН и АУТ. И я фанат СВИТЧ! Удобная на самом деле штука. Вот не соглашусь что СВИТЧ это плохо. Вот с с логикой и математикой у меня слабо.. Это сложновато. Еще прикол &*Pointer= Pointer; Да! Массив A+10! Я сам пишу обычно *(A+10). Вот это &A[i] = A+I; Еще я это пишу nullptr а тут типа NULL.
    Как раз по работе с памятью и искал что то для повтора. А потом искал что то чтобы с начала все.

  • @vatemsura
    @vatemsura 4 роки тому +2

    У меня жена как операционная система . Тоже имеет полные права и может отказать

  • @Terrarianec
    @Terrarianec Рік тому

    Как я сюда попал? 😳
    Помогите.

  • @juvusart
    @juvusart 5 років тому +14

    Мне моя операционка 3Гиб не дала, но я не расстроился, потому-что дала подружка...

    • @batfist6595
      @batfist6595 5 років тому

      Не на линуксе, случайно сидишь?

    • @batfist6595
      @batfist6595 4 роки тому

      @Innokentijs Dostovālovs так не бывает. Ты попробуй заполнить при этом выделенную память. Калоком например выдели

    • @alienhazzard7201
      @alienhazzard7201 Місяць тому

      @juvusart
      На самом деле тебе дала только твоя левая потная ручонка.

    • @juvusart
      @juvusart Місяць тому

      @alienhazzard7201 бро, что правда, то правда! Но я представлял подружку.

  • @korvet348
    @korvet348 4 роки тому

    Как программист знакомится с девушкой?)

  • @fish9370
    @fish9370 5 місяців тому

    Слабый препод. Не понимает, что дело не в его компиляторе, а дело в его операционной системе. У него ОС 32 разрядная. Отсюда максимальная память процесса

  • @misana77
    @misana77 6 років тому +10

    Там должно быть "OS didn't give", а не "gave")

    • @batfist6595
      @batfist6595 5 років тому

      Gave - прошедшее время, не? ОС же не постоянно не дает память для этой программы, а типа один раз в прошлом.

    • @ИльяНовичихин-ы1и
      @ИльяНовичихин-ы1и 5 років тому +3

      @@batfist6595 В отрицании в past simple глагол надо использовать в первой форме.

    • @batfist6595
      @batfist6595 5 років тому

      @@ИльяНовичихин-ы1и Ооо, спасибо, не знал

    • @JohnJTraston
      @JohnJTraston 3 місяці тому

      @@ИльяНовичихин-ы1и не только в отрицании. Прошедшее время уже обозначено вспомогательным глаголом. Но в любом случае перевод не правильный. "OS didn't give" будет пониматься как "ОС не давала".

  • @five4657
    @five4657 3 роки тому +1

    Didn’t give, а не didn’t gave)))

  • @n1ghtlyy396
    @n1ghtlyy396 Рік тому

    вы неадекватны.

  • @ЯНДЕКСМУЗЫКА-в1и
    @ЯНДЕКСМУЗЫКА-в1и 3 роки тому

    Противно слушать голос