Содержание
- 2. План лекции Про модель памяти программы Размещение в стековом кадре Выравнивание Связь выравниваний производного типа и
- 3. Модель памяти программы
- 4. Модель памяти программы Память программы Куча Стек вызовов потока T - 2 Стек вызовов потока T
- 5. Модель памяти программы Языки без указателей Java, Python, C#, Haskel, Ocaml, etc. Работа с памятью 100%
- 6. Модель памяти программы Языки без указателей Java, Python, C#, Haskel, Ocaml, etc. Работа с памятью 100%
- 7. Модель памяти программы Языки без указателей Java, Python, C#, Haskel, Ocaml, etc. Работа с памятью 100%
- 8. Модель памяти программы Языки без указателей Java, Python, C#, Haskel, Ocaml, etc. Работа с памятью 100%
- 9. Модель памяти программы Языки без указателей Java, Python, C#, Haskel, Ocaml, etc. Работа с памятью 100%
- 10. Модель памяти программы Языки без указателей Java, Python, C#, Haskel, Ocaml, etc. Работа с памятью 100%
- 11. Модель памяти программы Языки без указателей Java, Python, C#, Haskel, Ocaml, etc. Работа с памятью 100%
- 12. Размещение данных в стековом кадре Компилятор размещает значения переменных в стековом кадре в соответствии со стандартом
- 13. Размещение данных в стековом кадре Компилятор размещает значения переменных в стековом кадре в соответствии со стандартом
- 14. Размещение данных в стековом кадре Компилятор размещает значения переменных в стековом кадре в соответствии со стандартом
- 15. Размещение данных в стековом кадре Компилятор размещает значения переменных в стековом кадре в соответствии со стандартом
- 16. Размещение данных в стековом кадре Компилятор размещает значения переменных в стековом кадре в соответствии со стандартом
- 17. Выравнивание Значения типа Т должны храниться по адресам, кратным alignof(T) – выравниванию типа T Оператор alignof
- 18. Выравнивание Значения типа Т должны храниться по адресам, кратным alignof(T) – выравниванию типа T Оператор alignof
- 19. Выравнивание Значения типа Т должны храниться по адресам, кратным alignof(T) – выравниванию типа T Оператор alignof
- 20. Выравнивание Значения типа Т должны храниться по адресам, кратным alignof(T) – выравниванию типа T Оператор alignof
- 21. Выравнивание Значения типа Т должны храниться по адресам, кратным alignof(T) – выравниванию типа T Оператор alignof
- 22. Выравнивание простых типов и указателей Зависит от используемого компилятора (implementation specific) До C99 alignof(T) можно узнать
- 23. Выравнивание простых типов и указателей Зависит от используемого компилятора (implementation defined) До C99 alignof(T) можно узнать
- 24. Выравнивание простых типов и указателей Зависит от используемого компилятора (implementation defined) До C99 alignof(T) можно узнать
- 25. Как компилятор выравнивает производный тип
- 26. Как компилятор выравнивает производный тип Пусть T – производный тип Пусть T1, …, Tn – типы
- 27. Как компилятор выравнивает производный тип Пусть T – производный тип Пусть T1, …, Tn – типы
- 28. Как компилятор выравнивает производный тип Пусть T – производный тип Пусть T1, …, Tn – типы
- 29. Как компилятор выравнивает производный тип Пусть T – производный тип Пусть T1, …, Tn – типы
- 30. Как компилятор выравнивает производный тип Пусть T – производный тип Пусть T1, …, Tn – типы
- 31. Пример про выравнивание массива T = int (*)[4] – массив из 4 int Т1 = Т2
- 32. Пример про выравнивание массива T = int (*)[4] – массив из 4 int Т1 = Т2
- 33. Пример про выравнивание массива T = int (*)[4] – массив из 4 int Т1 = Т2
- 34. Пример про выравнивание массива T = int (*)[4] – массив из 4 int Т1 = Т2
- 35. Пример с выравниванием struct T = struct XY { int X; double Y; } T1 =
- 36. Пример с выравниванием struct T = struct XY { int X; double Y; } T1 =
- 37. Пример с выравниванием struct T = struct XY { int X; double Y; } T1 =
- 38. Пример с выравниванием struct T = struct XY { int X; double Y; } T1 =
- 39. Пример с выравниванием struct T = struct XY { int X; double Y; } T1 =
- 40. Пример с выравниванием struct T = struct XY { int X; double Y; } T1 =
- 41. Пример с выравниванием struct T = struct XY { int X; double Y; } T1 =
- 42. Пример с выравниванием struct T = struct XY { int X; double Y; } T1 =
- 43. Пример с выравниванием struct T = struct XY { int X; double Y; } T1 =
- 44. Выравнивающие байты в конце struct/union Для правильного выравнивания элементов массива T требуется, чтобы sizeof(T) был кратен
- 45. Выравнивающие байты в конце struct/union Для правильного выравнивания элементов массива T требуется, чтобы sizeof(T) был кратен
- 46. Выравнивающие байты в конце struct/union Для правильного выравнивания элементов массива T требуется, чтобы sizeof(T) был кратен
- 47. Выравнивающие байты в конце struct/union Для правильного выравнивания элементов массива T требуется, чтобы sizeof(T) был кратен
- 48. Выравнивающие байты внутри struct Компилятор может добавлять выравнивающие байты между элементами структуры для правильного выравнивания ее
- 49. Выравнивающие байты внутри struct Компилятор может добавлять выравнивающие байты между элементами структуры для правильного выравнивания ее
- 50. Выравнивающие байты внутри struct Компилятор может добавлять выравнивающие байты между элементами структуры для правильного выравнивания ее
- 51. Динамическое распределение памяти Программа в процессе работы сама резервирует и освобождает участки памяти для хранения необходимых
- 52. Динамическое распределение памяти Программа в процессе работы сама резервирует и освобождает блоки памяти для хранения необходимых
- 53. Динамическое распределение памяти Программа в процессе работы сама резервирует и освобождает блоки памяти для хранения необходимых
- 54. Динамическое распределение памяти Программа в процессе работы сама резервирует и освобождает блоки памяти для хранения необходимых
- 55. Динамическое распределение памяти Программа в процессе работы сама резервирует и освобождает блоки памяти для хранения необходимых
- 56. Стандартные функции malloc, free и др. void* malloc(size_t size) резервирует непрерывный блок из size байтов и
- 57. Стандартные функции malloc, free и др. void* malloc(size_t size) резервирует непрерывный блок из size байтов и
- 58. Стандартные функции malloc, free и др. void* malloc(size_t size) резервирует непрерывный блок из size байтов и
- 59. Стандартные функции malloc, free и др. void* malloc(size_t size) резервирует непрерывный блок из size байтов и
- 60. Стандартные функции malloc, free и др. void* malloc(size_t size) резервирует непрерывный блок из size байтов и
- 61. Стандартные функции malloc, free и др. void* malloc(size_t size) резервирует непрерывный блок из size байтов и
- 62. Стандартные функции malloc, free и др. void* malloc(size_t size) резервирует непрерывный блок из size байтов и
- 63. Стандартные функции malloc, free и др. void* malloc(size_t size) резервирует непрерывный блок из size байтов и
- 64. Стандартные функции malloc, free и др. void* malloc(size_t size) резервирует непрерывный блок из size байтов и
- 65. Стандартные функции malloc, free и др. void* malloc(size_t size) резервирует непрерывный блок из size байтов и
- 66. Doug Lea’s malloc (dlmalloc) Основа malloc в библиотеке GNU C (libc) для большинства версий Linux http://gee.cs.oswego.edu/dl/html/malloc.html
- 67. Doug Lea’s malloc (dlmalloc) Основа malloc в библиотеке GNU C (libc) для большинства версий Linux http://gee.cs.oswego.edu/dl/html/malloc.html
- 68. Doug Lea’s malloc (dlmalloc) Основа malloc в библиотеке GNU C (libc) для большинства версий Linux http://gee.cs.oswego.edu/dl/html/malloc.html
- 69. Doug Lea’s malloc (dlmalloc) Основа malloc в библиотеке GNU C (libc) для большинства версий Linux http://gee.cs.oswego.edu/dl/html/malloc.html
- 70. Устройство «кучи»
- 71. Устройство «кучи»
- 72. Устройство «кучи»
- 73. Устройство «кучи»
- 74. Устройство «кучи»
- 75. Резервирование malloc(size) block = свободный блок min размера ≥ size Если block не найден, то возвращаем
- 76. Резервирование malloc(size) block = свободный блок min размера ≥ size Если block не найден, то возвращаем
- 77. Резервирование malloc(size) block = свободный блок min размера ≥ size Если block не найден, то возвращаем
- 78. Резервирование malloc(size) block = свободный блок min размера ≥ size Если block не найден, то возвращаем
- 79. Резервирование malloc(size) block = свободный блок min размера ≥ size Если block не найден, то возвращаем
- 80. Резервирование malloc(size) block = свободный блок min размера ≥ size Если block не найден, то возвращаем
- 81. Резервирование malloc(size) block = свободный блок min размера ≥ size Если block не найден, то возвращаем
- 82. Освобождение free(ptr) Объединяем с блоком по адресу ptr блок слева (если свободен) и блок справа (если
- 83. Освобождение free(ptr) Объединяем с блоком по адресу ptr блок слева (если свободен) и блок справа (если
- 84. Освобождение free(ptr) Объединяем с блоком по адресу ptr блок слева (если свободен) и блок справа (если
- 85. Накладные расходы при работе с кучей Поиск min свободного блока в malloc malloc размера > 512
- 86. Накладные расходы при работе с кучей Поиск min свободного блока в malloc malloc размера > 512
- 87. Накладные расходы при работе с кучей Поиск min свободного блока в malloc malloc размера > 512
- 88. Фрагментация кучи Резервирование и освобождение блоков разного размера приводит к фрагментации for (int i = 0;
- 89. Фрагментация кучи Резервирование и освобождение блоков разного размера приводит к фрагментации for (int i = 0;
- 90. Фрагментация кучи Резервирование и освобождение блоков разного размера приводит к фрагментации for (int i = 0;
- 91. Фрагментация кучи Резервирование и освобождение блоков разного размера приводит к фрагментации for (int i = 0;
- 92. Фрагментация кучи Резервирование и освобождение блоков разного размера приводит к фрагментации Свободная память разбита на большое
- 93. Виды ошибок при работе с кучей // missing NULL pointer check int* ptr = malloc(4); *ptr
- 94. Виды ошибок при работе с кучей // missing NULL pointer check int* ptr = malloc(4); *ptr
- 95. Виды ошибок при работе с кучей // missing NULL pointer check int* ptr = malloc(4); *ptr
- 96. Виды ошибок при работе с кучей // missing NULL pointer check int* ptr = malloc(4); *ptr
- 97. Виды ошибок при работе с кучей // missing NULL pointer check int* ptr = malloc(4); *ptr
- 98. Виды ошибок при работе с кучей // missing NULL pointer check int* ptr = malloc(4); *ptr
- 99. Виды ошибок при работе с кучей // missing NULL pointer check int* ptr = malloc(4); *ptr
- 100. Виды ошибок при работе с кучей // missing NULL pointer check int* ptr = malloc(4); *ptr
- 101. Виды ошибок при работе с кучей // missing NULL pointer check int* ptr = malloc(4); *ptr
- 102. Address sanitizer Константин Серебряный1 Derek Bruening2 Александр Потапенко3 Дмитрий Вьюков4 AddressSanitizer: A Fast Address Sanity Checker
- 103. Address sanitizer Константин Серебряный1 Derek Bruening2 Александр Потапенко3 Дмитрий Вьюков4 AddressSanitizer: A Fast Address Sanity Checker
- 104. Address sanitizer Константин Серебряный1 Derek Bruening2 Александр Потапенко3 Дмитрий Вьюков4 AddressSanitizer: A Fast Address Sanity Checker
- 105. Address sanitizer Константин Серебряный1 Derek Bruening2 Александр Потапенко3 Дмитрий Вьюков4 AddressSanitizer: A Fast Address Sanity Checker,
- 106. Use after free
- 107. Buffer overflow (heap corruption)
- 109. Скачать презентацию