Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Количество куч / 17 сообщений из 17, страница 1 из 1
24.07.2014, 12:46
    #38704792
kot07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество куч
Добрый день, как узнать количество куч в памяти?
...
Рейтинг: 0 / 0
24.07.2014, 13:06
    #38704833
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество куч
Пройтись по ним Heap32ListFirst/Next и посчитать, загибая пальцы?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.07.2014, 13:11
    #38704840
kot07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество куч
По заданию нужно определить количество куч, количество блоков в кучах, объем памяти во всех кучах и в каждой отдельно
...
Рейтинг: 0 / 0
24.07.2014, 13:12
    #38704843
kot07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество куч
т.е. получается нужно вывести инфу о кучах. Возможно ли это сделать какими-то системными командами? например как в cmd
systeminfo и выдает всю инфу
...
Рейтинг: 0 / 0
24.07.2014, 13:40
    #38704883
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество куч
kot07Добрый день, как узнать количество куч в памяти?

Windows ?
...
Рейтинг: 0 / 0
24.07.2014, 13:50
    #38704902
kot07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество куч
MasterZiv,

да
...
Рейтинг: 0 / 0
24.07.2014, 13:53
    #38704911
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество куч
kot07По заданию нужно определить количество куч, количество блоков в кучах, объем
памяти во всех кучах и в каждой отдельно
Ну добавь к вышеупомянутому HeapWalk(). В чём проблема-то? MSDN не можешь найти?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.07.2014, 13:57
    #38704924
kot07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество куч
Dimitry Sibiryakov,

мне бы наглядный пример, msdn нашел но там нет примеров
...
Рейтинг: 0 / 0
24.07.2014, 14:57
    #38705035
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество куч
kot07Dimitry Sibiryakov,

мне бы наглядный пример, msdn нашел но там нет примеров

Нету?

http://msdn.microsoft.com/ru-ru/library/windows/desktop/ee175819(v=vs.85).aspx

или лень ?
...
Рейтинг: 0 / 0
24.07.2014, 15:00
    #38705041
kot07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество куч
MasterZiv,

только хотел скинуть данный пример но найден он был на просторах cyberforum.ru

Задам глупый вопрос, но разве результат показывает не одну кучу?или куча одна во всей памяти?
...
Рейтинг: 0 / 0
24.07.2014, 15:36
    #38705099
kot07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество куч
как теперь пройтись Heap32ListFirst/Next и посчитать? куда что добавить?
...
Рейтинг: 0 / 0
24.07.2014, 16:23
    #38705175
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество куч
kot07куда что добавить?
В программу нужно добавить соответствующие операторы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.07.2014, 17:25
    #38705270
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество куч
kot07Задам глупый вопрос, но разве результат показывает не одну кучу?или куча одна во всей памяти?

Ты какой предмет изучаешь ?
...
Рейтинг: 0 / 0
24.07.2014, 18:23
    #38705335
kot07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество куч
MasterZiv,
Системное программное обеспечение, а что?
...
Рейтинг: 0 / 0
24.07.2014, 18:43
    #38705350
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество куч
...
Рейтинг: 0 / 0
25.07.2014, 12:49
    #38705841
kot07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество куч
Извиняюсь за свою тупость, но я не понимаю
Это показывает одну кучу?
Код: plaintext
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.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
#include <windows.h>
#include <tchar.h>
#include <stdio.h>

int __cdecl _tmain()
{
    DWORD LastError;
    HANDLE hHeap;
    PROCESS_HEAP_ENTRY Entry;

    //
    // Create a new heap with default parameters.
    //
    hHeap = HeapCreate(0, 0, 0);
    if (hHeap == NULL) {
        _tprintf(TEXT("Failed to create a new heap with LastError %d.\n"),
                 GetLastError());
        return 1;
    }

    //
    // Lock the heap to prevent other threads from accessing the heap 
    // during enumeration.
    //
    if (HeapLock(hHeap) == FALSE) {
        _tprintf(TEXT("Failed to lock heap with LastError %d.\n"),
                 GetLastError());
        return 1;
    }

    _tprintf(TEXT("Walking heap %#p...\n\n"), hHeap);

    Entry.lpData = NULL;
    while (HeapWalk(hHeap, &Entry) != FALSE) {
        if ((Entry.wFlags & PROCESS_HEAP_ENTRY_BUSY) != 0) {
            _tprintf(TEXT("Allocated block"));

            if ((Entry.wFlags & PROCESS_HEAP_ENTRY_MOVEABLE) != 0) {
                _tprintf(TEXT(", movable with HANDLE %#p"), Entry.Block.hMem);
            }

            if ((Entry.wFlags & PROCESS_HEAP_ENTRY_DDESHARE) != 0) {
                _tprintf(TEXT(", DDESHARE"));
            }
        }
        else if ((Entry.wFlags & PROCESS_HEAP_REGION) != 0) {
            _tprintf(TEXT("Region\n  %d bytes committed\n") \
                     TEXT("  %d bytes uncommitted\n  First block address: %#p\n") \
                     TEXT("  Last block address: %#p\n"),
                     Entry.Region.dwCommittedSize,
                     Entry.Region.dwUnCommittedSize,
                     Entry.Region.lpFirstBlock,
                     Entry.Region.lpLastBlock);
        }
        else if ((Entry.wFlags & PROCESS_HEAP_UNCOMMITTED_RANGE) != 0) {
            _tprintf(TEXT("Uncommitted range\n"));
        }
        else {
            _tprintf(TEXT("Block\n"));
        }

        _tprintf(TEXT("  Data portion begins at: %#p\n  Size: %d bytes\n") \
                 TEXT("  Overhead: %d bytes\n  Region index: %d\n\n"),
                 Entry.lpData,
                 Entry.cbData,
                 Entry.cbOverhead,
                 Entry.iRegionIndex);
    }
    LastError = GetLastError();
    if (LastError != ERROR_NO_MORE_ITEMS) {
        _tprintf(TEXT("HeapWalk failed with LastError %d.\n"), LastError);
    }

    //
    // Unlock the heap to allow other threads to access the heap after 
    // enumeration has completed.
    //
    if (HeapUnlock(hHeap) == FALSE) {
        _tprintf(TEXT("Failed to unlock heap with LastError %d.\n"),
                 GetLastError());
    }

    //
    // When a process terminates, allocated memory is reclaimed by the operating
    // system so it is not really necessary to call HeapDestroy in this example.
    // However, it may be advisable to call HeapDestroy in a longer running
    // application.
    //
    if (HeapDestroy(hHeap) == FALSE) {
        _tprintf(TEXT("Failed to destroy heap with LastError %d.\n"),
                 GetLastError());
    }

    return 0;
}


Это чтобы пройтись по всем кучам?
Код: plaintext
1.
2.
3.
4.
BOOL WINAPI Heap32ListFirst( 
  HANDLE hSnapshot, 
  LPHEAPLIST32 lphl 
);



А это дело нужно чтобы посчитать количество куч?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
typedef struct tagHEAPLIST32 { 
  DWORD dwSize; 
  DWORD th32ProcessID; 
  DWORD th32HeapID; 
  DWORD dwFlags; 
  } HEAPLIST32; 
  typedef HEAPLIST32* PHEAPLIST32; 
  typedef HEAPLIST32* LPHEAPLIST32; 



и чтобы получить то что я хочу надо все записать в единое целое?
...
Рейтинг: 0 / 0
25.07.2014, 14:28
    #38705982
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество куч
Извиняюсь за свою тупость, но я не понимаю
Это показывает одну кучу?

Очевидно, что да.
Я например не знаю, я кучи никогда не создавал, мне всегда стандартных хватало.
Прочитай раздел, я тебе дал ссылку.

Вообще, на сколько я предстваляю, у каждого процесса хип один по умолчанию.
Если нужно, чтобы было много, надо их создавать самому.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Количество куч / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]