Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Многопоточное программирование (Лекция 1). Стандарты C++, контейнеры C++, красно-черные деревья, B-деревья

Содержание

ЛитератураДжеф Элджер. С++: Библиотека пограммистаJeff Alger. C++ for Real Programmers
Многопоточное программированиеДмитрий Калугин-БалашовЛекция №1 ЛитератураДжеф Элджер. С++: Библиотека пограммистаJeff Alger. C++ for Real Programmers Стандарты C++C++98/C++03BoostC++11C++14 Контейнеры C++STLSTL (C++11)Boost Контейнеры STLПоследовательные контейнерыАссоциативные контейнерыКонтейнеры-адаптерыПсевдоконтейнеры Контейнеры STLПоследовательные контейнерыАссоциативные контейнерыКонтейнеры-адаптерыПсевдоконтейнеры Последовательные контейнеры STLstd::vectorstd::liststd::deque Ассоциативные контейнеры STLstd::setstd::mapstd::multisetstd::multimap Красно-черные деревья Красно-черные деревья Красно-черные деревьяhttp://www.youtube.com/v/vDHFF4wjWYU B-деревьяhttps://code.google.com/p/cpp-btree/ B-деревьяbtree_setbtree_mapbtree_multisetbtree_multimap Контейнеры-адаптеры STLstd::stackstd::queuestd::priority_queue Псевдоконтейнеры STLstd::bitsetstd::basic_stringstd::valarray Последовательные контейнеры STL (C++11)std::arraystd::forward_list std::array vs. std::vectorstd::vector хранит все элементы в кучеstd::array хранит все элементы в std::forward_listИтератор может двигаться только в одном направлении.#include #include int main (){ std::forward_list Хэш-таблицы STL (C++11)std::unordered_setstd::unordered_mapstd::unordered_multisetstd::unordered_multimap Хэш-таблицы STL (C++11) Хэш-таблицы STL (C++11) boost::circular_buffer boost::circular_buffer_space_optimized Умные указатели Умные указателиПример «самодельного» умного указателя.class PFoo { private:   Foo* foo; Умные указателиПример «самодельного» умного указателя.template class SP { private:   Type* std::auto_ptr (C++03) std::auto_ptr (C++03)Не использовать! std::auto_ptr (C++03)#include int func(){	std::auto_ptr PFoo1(new CFoo());	std::auto_ptr PFoo2;	PFoo2 = PFoo1;}Пример некорректного использования std::auto_ptr std::unique_ptr (C++11)Невозможность скопировать std::unique_ptr#include int func(){	std::unique_ptr PFoo1(new CFoo());	std::unique_ptr PFoo2;	PFoo2 = PFoo1; // Ошибка при компиляции} std::unique_ptr (C++11)Перемещение std::unique_ptr#include int func(){	std::unique_ptr PFoo1(new CFoo());	std::unique_ptr PFoo2;	PFoo2 = std::move(PFoo1);} std::shared_ptr (C++11)Пример использования std::shared_ptr#include int func(){	std::shared_ptr PFoo1(new CFoo());	std::shared_ptr PFoo2;	PFoo2 = PFoo1;} std::shared_ptr (C++11) std::shared_ptr (C++11) std::weak_ptr (C++11) Аллокаторы Аллокаторы Аллокаторы Аллокаторы Аллокаторы Аллокаторы Аллокаторы Аллокаторы Аллокаторы Аллокаторы Аллокаторы Аллокаторы Аллокаторыmalloc/calloc/realloc/freenew/deletenew[]/delete[] Аллокаторыccmallocdmalloctcmalloc ccmallocДелаем утечки.void Leak(char *inStr){ char *str = (char *) malloc(strlen(inStr)); memcpy(str, inStr, ccmallocФункция main с утечками.int main(){ char *str; Leak( ccmallocРезультат ccmalloc (1).* 61.3% = 19 Bytes of garbage allocated in 1 ccmallocРезультат ccmalloc (2).|    * 38.7% = 12 Bytes of dmallocРезультат dmalloc.not freed: '0x45008' (12 bytes) from 'ra=0x1f8f4'not freed: '0x45028' (12 bytes) tcmallocРаботает быстрее, чем malloc из glibcLD_PRELOAD= Уплотнение памяти Уплотнение памяти Уплотнение памяти Уплотнение памяти Алгоритм Бейкера Уплотнение на месте Разобраться самостоятельноgitmake Дмитрий Калугин-Балашовrvncerr@rvncerr.org
Слайды презентации

Слайд 2 Литература
Джеф Элджер. С++: Библиотека пограммиста
Jeff Alger. C++ for

ЛитератураДжеф Элджер. С++: Библиотека пограммистаJeff Alger. C++ for Real Programmers

Real Programmers


Слайд 3 Стандарты C++
C++98/C++03
Boost
C++11
C++14

Стандарты C++C++98/C++03BoostC++11C++14

Слайд 4 Контейнеры C++
STL
STL (C++11)
Boost

Контейнеры C++STLSTL (C++11)Boost

Слайд 5 Контейнеры STL
Последовательные контейнеры
Ассоциативные контейнеры
Контейнеры-адаптеры
Псевдоконтейнеры

Контейнеры STLПоследовательные контейнерыАссоциативные контейнерыКонтейнеры-адаптерыПсевдоконтейнеры

Слайд 6 Контейнеры STL
Последовательные контейнеры
Ассоциативные контейнеры
Контейнеры-адаптеры
Псевдоконтейнеры

Контейнеры STLПоследовательные контейнерыАссоциативные контейнерыКонтейнеры-адаптерыПсевдоконтейнеры

Слайд 7 Последовательные контейнеры STL
std::vector
std::list
std::deque

Последовательные контейнеры STLstd::vectorstd::liststd::deque

Слайд 8 Ассоциативные контейнеры STL
std::set
std::map
std::multiset
std::multimap

Ассоциативные контейнеры STLstd::setstd::mapstd::multisetstd::multimap

Слайд 9 Красно-черные деревья

Красно-черные деревья

Слайд 10 Красно-черные деревья

Красно-черные деревья

Слайд 11 Красно-черные деревья
http://www.youtube.com/v/vDHFF4wjWYU

Красно-черные деревьяhttp://www.youtube.com/v/vDHFF4wjWYU

Слайд 12 B-деревья
https://code.google.com/p/cpp-btree/

B-деревьяhttps://code.google.com/p/cpp-btree/

Слайд 13 B-деревья
btree_set
btree_map
btree_multiset
btree_multimap

B-деревьяbtree_setbtree_mapbtree_multisetbtree_multimap

Слайд 14 Контейнеры-адаптеры STL
std::stack
std::queue
std::priority_queue

Контейнеры-адаптеры STLstd::stackstd::queuestd::priority_queue

Слайд 15 Псевдоконтейнеры STL
std::bitset
std::basic_string
std::valarray

Псевдоконтейнеры STLstd::bitsetstd::basic_stringstd::valarray

Слайд 16 Последовательные контейнеры STL (C++11)
std::array
std::forward_list

Последовательные контейнеры STL (C++11)std::arraystd::forward_list

Слайд 17 std::array vs. std::vector
std::vector хранит все элементы в куче
std::array

std::array vs. std::vectorstd::vector хранит все элементы в кучеstd::array хранит все элементы

хранит все элементы в себе

std::array не может изменить свой

размер
std::array должен знать свой размер на этапе компиляции
std::array работает быстрее

Слайд 18 std::forward_list
Итератор может двигаться только в одном направлении.
#include
#include

std::forward_listИтератор может двигаться только в одном направлении.#include #include int main (){



int main ()
{
std::forward_list mylist = { 34, 77,

16, 2 };
std::cout << "mylist contains:";
for ( auto it = mylist.begin(); it != mylist.end(); ++it )
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}


Слайд 19 Хэш-таблицы STL (C++11)
std::unordered_set
std::unordered_map
std::unordered_multiset
std::unordered_multimap

Хэш-таблицы STL (C++11)std::unordered_setstd::unordered_mapstd::unordered_multisetstd::unordered_multimap

Слайд 20 Хэш-таблицы STL (C++11)

Хэш-таблицы STL (C++11)

Слайд 21 Хэш-таблицы STL (C++11)

Хэш-таблицы STL (C++11)

Слайд 22 boost::circular_buffer

boost::circular_buffer

Слайд 23 boost::circular_buffer_space_optimized

boost::circular_buffer_space_optimized

Слайд 24 Умные указатели

Умные указатели

Слайд 25 Умные указатели
Пример «самодельного» умного указателя.
class PFoo {
private:

Умные указателиПример «самодельного» умного указателя.class PFoo { private:  Foo* foo;


Foo* foo;
public:
PFoo() :

foo(NULL) {}
PFoo(Foo* f) : foo(f) {}
operator Foo*() { return foo; }
Foo* operator->() { return foo; }
};

void f(Foo*);
PFoo pf(new Foo);
f(pf);
pf->MemberOfFoo();

Слайд 26 Умные указатели
Пример «самодельного» умного указателя.
template
class

Умные указателиПример «самодельного» умного указателя.template class SP { private:  Type*

SP {
private:
Type* pointer;
public:

SP() : pointer(NULL) {}
SP(Type* p) : pointer(p) {}
operator Type*() { return pointer; }
Type* operator->() { return pointer; }
};

void f(Foo*);
Ptr pf(new Foo);
f(pf);
pf->MemberOfFoo();

Слайд 27 std::auto_ptr (C++03)

std::auto_ptr (C++03)

Слайд 28 std::auto_ptr (C++03)
Не использовать!

std::auto_ptr (C++03)Не использовать!

Слайд 29 std::auto_ptr (C++03)
#include
int func()
{
std::auto_ptr PFoo1(new CFoo());
std::auto_ptr PFoo2;
PFoo2 =

std::auto_ptr (C++03)#include int func(){	std::auto_ptr PFoo1(new CFoo());	std::auto_ptr PFoo2;	PFoo2 = PFoo1;}Пример некорректного использования std::auto_ptr

PFoo1;
}

Пример некорректного использования std::auto_ptr


Слайд 30 std::unique_ptr (C++11)
Невозможность скопировать std::unique_ptr
#include
int func()
{
std::unique_ptr PFoo1(new CFoo());
std::unique_ptr

std::unique_ptr (C++11)Невозможность скопировать std::unique_ptr#include int func(){	std::unique_ptr PFoo1(new CFoo());	std::unique_ptr PFoo2;	PFoo2 = PFoo1; // Ошибка при компиляции}

PFoo2;
PFoo2 = PFoo1; // Ошибка при компиляции
}


Слайд 31 std::unique_ptr (C++11)
Перемещение std::unique_ptr
#include
int func()
{
std::unique_ptr PFoo1(new CFoo());
std::unique_ptr PFoo2;
PFoo2

std::unique_ptr (C++11)Перемещение std::unique_ptr#include int func(){	std::unique_ptr PFoo1(new CFoo());	std::unique_ptr PFoo2;	PFoo2 = std::move(PFoo1);}

= std::move(PFoo1);
}


Слайд 32 std::shared_ptr (C++11)
Пример использования std::shared_ptr
#include
int func()
{
std::shared_ptr PFoo1(new CFoo());
std::shared_ptr

std::shared_ptr (C++11)Пример использования std::shared_ptr#include int func(){	std::shared_ptr PFoo1(new CFoo());	std::shared_ptr PFoo2;	PFoo2 = PFoo1;}

PFoo2;
PFoo2 = PFoo1;
}


Слайд 33 std::shared_ptr (C++11)

std::shared_ptr (C++11)

Слайд 34 std::shared_ptr (C++11)

std::shared_ptr (C++11)

Слайд 35 std::weak_ptr (C++11)

std::weak_ptr (C++11)

Слайд 36 Аллокаторы

Аллокаторы

Слайд 37 Аллокаторы























Аллокаторы

Слайд 38 Аллокаторы























Аллокаторы

Слайд 39 Аллокаторы























Аллокаторы

Слайд 40 Аллокаторы























Аллокаторы

Слайд 41 Аллокаторы























Аллокаторы

Слайд 42 Аллокаторы























Аллокаторы

Слайд 43 Аллокаторы























Аллокаторы

Слайд 44 Аллокаторы























Аллокаторы

Слайд 45 Аллокаторы























Аллокаторы

Слайд 46 Аллокаторы























Аллокаторы

Слайд 47 Аллокаторы























Аллокаторы

Слайд 48 Аллокаторы
malloc/calloc/realloc/free
new/delete
new[]/delete[]

Аллокаторыmalloc/calloc/realloc/freenew/deletenew[]/delete[]

Слайд 49 Аллокаторы
ccmalloc
dmalloc
tcmalloc

Аллокаторыccmallocdmalloctcmalloc

Слайд 50 ccmalloc
Делаем утечки.
void Leak(char *inStr)
{
char *str = (char

ccmallocДелаем утечки.void Leak(char *inStr){ char *str = (char *) malloc(strlen(inStr)); memcpy(str,

*) malloc(strlen(inStr));
memcpy(str, inStr, strlen(inStr));
}

char *AvoidLeak(char *inStr)
{
char *str

= (char *) malloc(strlen(inStr));
memcpy(str, inStr, strlen(inStr));
return str;
}


Слайд 51 ccmalloc
Функция main с утечками.
int main()
{
char *str;

Leak("This

ccmallocФункция main с утечками.int main(){ char *str; Leak(

leaks 19 bytes");
str = AvoidLeak("This is not a

26 byte leak");
free(str);
str = AvoidLeak("12 byte leak");
exit(0);
}


Слайд 52 ccmalloc
Результат ccmalloc (1).
* 61.3% = 19 Bytes of

ccmallocРезультат ccmalloc (1).* 61.3% = 19 Bytes of garbage allocated in

garbage allocated in 1 allocation
| |
|

| 0x40047306 in
| |
| | 0x080493eb in

| | at test1.c:20
| |
| | 0x0804935c in
| | at test1.c:5
| |
| `-----> 0x08052fb7 in
| at src/wrapper.c:318


Слайд 53 ccmalloc
Результат ccmalloc (2).
|
* 38.7%

ccmallocРезультат ccmalloc (2).|  * 38.7% = 12 Bytes of garbage

= 12 Bytes of garbage allocated in 1 allocation
|

|
| | 0x40047306 in
| |
| | 0x0804941e in

| | at test1.c:23
| |
| | 0x080493a4 in
| | at test1.c:11
| |
| `-----> 0x08052fb7 in
| at src/wrapper.c:318
|
`------------------------------------------------------


Слайд 54 dmalloc
Результат dmalloc.
not freed: '0x45008' (12 bytes) from 'ra=0x1f8f4'
not

dmallocРезультат dmalloc.not freed: '0x45008' (12 bytes) from 'ra=0x1f8f4'not freed: '0x45028' (12

freed: '0x45028' (12 bytes) from 'unknown'
not freed: '0x45048' (10

bytes) from 'argv.c:1077'
known memory not freed: 1 pointer, 10 bytes
unknown memory not freed: 2 pointers, 24 bytes


Слайд 55 tcmalloc
Работает быстрее, чем malloc из glibc

LD_PRELOAD="/usr/lib/libtcmalloc.so"

tcmallocРаботает быстрее, чем malloc из glibcLD_PRELOAD=

Слайд 56 Уплотнение памяти

Уплотнение памяти

Слайд 57 Уплотнение памяти























Уплотнение памяти

Слайд 58 Уплотнение памяти























Уплотнение памяти

Слайд 59 Уплотнение памяти























Уплотнение памяти

Слайд 60 Алгоритм Бейкера










Алгоритм Бейкера

Слайд 61 Уплотнение на месте

Уплотнение на месте

Слайд 62 Разобраться самостоятельно
git
make

Разобраться самостоятельноgitmake

  • Имя файла: mnogopotochnoe-programmirovanie-lektsiya-1-standarty-c-konteynery-c-krasno-chernye-derevya-b-derevya.pptx
  • Количество просмотров: 116
  • Количество скачиваний: 0