Форум программистов, компьютерный форум CyberForum.ru

Как создать объект в новой куче? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Дано целое число и найти его сумму http://www.cyberforum.ru/cpp-beginners/thread766153.html
Дано целое число N(>0).Hайти сумму N*2+(N+1)*2+(N+2)*2+...+(N*2)*2 Небольшая заготовка #include <vcl.h> #include <conio.h> #include <iostream.h> int main() { int N;
C++ вывести на печать случайный массив или матрицу как вывести на печать случайный массив или матрицу на Visual Studio? тоесть как сгенерировать массив/матрицу? http://www.cyberforum.ru/cpp-beginners/thread766148.html
Массив символов char и указатели C++
В общем нужно сохранить путь к диску в переменную, что бы потом использовать в _findfirst Но сколько бы я не бился над этим, ничего не выходит... Это криво код, не работает... #include <io.h> #include <iostream> using namespace std; void main (void) {
Определить инвариант в цикле C++
Программа проверяет является ли число простым. Подскажите как составить инвариант для этой программы. Не понимаю как это делается вообще. #include <stdio.h> #include <math.h> int main( ) { int i,k; int a; scanf("%d", &k);
C++ error C2912: явная специализация; не является специализацией функции-шаблона http://www.cyberforum.ru/cpp-beginners/thread766131.html
Как исправить ошибку? #include <iostream> using namespace std; template <typename t> void PrintArray(t *arr, const int size) { for (int i=0; i<=size-1; i++) cout << arr << " ";
C++ Подсчет гласных букв Написать програму которая считает сколько в веденой пользователем строке гласнихбукв и четных цыфр! С++ подробнее

Показать сообщение отдельно
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
19.01.2013, 16:52     Как создать объект в новой куче?
Цитата Сообщение от IvanPryamoy Посмотреть сообщение
Как создать "обертки памяти" в виде отдельных куч для потоков?
Банальный пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <windows.h>
 
#define USE_TLS
 
#ifdef USE_TLS
DWORD g_heap_TLS_idx;
 
void InitTLS(void)
{
    g_heap_TLS_idx = TlsAlloc();
}
 
void FreeTLS(void)
{
    TlsFree(g_heap_TLS_idx);
}
 
void InitThreadHeap(void)
{
    HANDLE heap = HeapCreate(0, 0, 10 * 1024 * 1024);
    TlsSetValue(g_heap_TLS_idx, heap);
}
 
HANDLE GetThreadHeap(void)
{
    return TlsGetValue(g_heap_TLS_idx);
}
 
void FreeThreadHeap(void)
{
    HeapDestroy(GetThreadHeap());
}
 
void* operator new(size_t size)
{
    return HeapAlloc(GetThreadHeap(), 0, size);
}
 
void operator delete(void* ptr)
{
    HeapFree(GetThreadHeap(), 0, ptr);
}
#endif
 
DWORD WINAPI entry(LPVOID)
{
#ifdef USE_TLS
    InitThreadHeap();
#endif
 
    int *x = new int;
    std::cout << x << "\n";
    delete x;
 
#ifdef USE_TLS
    FreeThreadHeap();
#endif
}
 
int main(int argc, char *argv[])
{
#ifdef USE_TLS
    InitTLS();
#endif
 
    HANDLE thread[2];
    thread[0] = CreateThread(NULL, 0, entry, NULL, 0, NULL);
    thread[1] = CreateThread(NULL, 0, entry, NULL, 0, NULL);
    WaitForMultipleObjects(2, thread, TRUE, 60 * 1000);
 
#ifdef USE_TLS
    FreeTLS();
#endif
    return 0;
}
Если дефайн есть, то те инты в разных потоках создаются в разных кучах (адреса чёрти где разбросаны). Если нет, то в одной и той же (адреса рядом). Никакой синхронизации и т. п., так что выводит иногда криво.

Вот эти куски, что в ифдефах в main() и entry(), вообще должны автомагически вставляться кем-то, чтобы 100% не забыли всё создать и удалить. И чтоб не вызвали по два раза, и т. п.

(Естессно, кроме этого ещё масса приключений впереди: массивы, обработка ошибок, "какая-то падла переопределила вместо меня глобальный new и всё сломалось"...)
 
Текущее время: 08:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru