powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Про память (незнаю как еще назвать)...
4 сообщений из 4, страница 1 из 1
Про память (незнаю как еще назвать)...
    #32854031
anterior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Моя программа предназначена для поиска файлов. И эта не конечная ее цель. Она может искать включая подкаталоги, по аттрибутам, дате создания/изменения/доступа, по размеру и тд.. и тп.. Но вот представьте себе: я начинаю сканировать диск C:\ полностью включая подкаталоги и программа мне находит 41 481 файлов. Информацию об каждом файле она хранит в классе CArray (такое я хранилище выбрал, хотя можно было и вопользоваться stl но так как я пишу mfc приложение...). Каждый файл представлен вот такой структурой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
struct f_item 
{
    f_item (LPCTSTR szFilePath = _TEXT("\0"), const LPWIN32_FIND_DATA lpWFD = NULL);
    
	LPWIN32_FIND_DATA lpWFD;
	LPTSTR szFilePath;

    ~f_item();
};
И вот, после того как она найдет она весит - 50 000 КБ если работает под юникодом, а в ANSI кодировке 37 000 КБ что также очень много. Такой же тест я провожу в виндосовском поисковике, но она как я вычислил занимает меньше - около 27 000 КБ.
Как мне быть? Может стоит использовать виртуальную память?
...
Рейтинг: 0 / 0
Про память (незнаю как еще назвать)...
    #32854342
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО szFilePath хранит много избыточной информации. Можно было-бы попробовать использовать не вектор а дерево например.
...
Рейтинг: 0 / 0
Про память (незнаю как еще назвать)...
    #32855543
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может стоит использовать windows'овский поисковик? =)
...
Рейтинг: 0 / 0
Про память (незнаю как еще назвать)...
    #32857351
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты не можешь не использовать виртуальную память под WIN32.
Насчет предложения использовать дерево - вектор (stl::vector или CArray) самый минимальный по памяти. так что не стоит, если не нужна сортировка и быстрый поиск.

Эти
Код: plaintext
1.
2.
	LPWIN32_FIND_DATA lpWFD;
	LPTSTR szFilePath;
указатели наверное тоже куда-то указывают на выделяемую память ?
А зачем хранить в структуре указатели, а не сами данные? Вот тебе уже лишних 41481 * 4 * 2 = 331848 byte .

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
typedef struct _WIN32_FIND_DATA {  
DWORD dwFileAttributes;  
FILETIME ftCreationTime;  
FILETIME ftLastAccessTime;  
FILETIME ftLastWriteTime;  
DWORD nFileSizeHigh;  
DWORD nFileSizeLow;  
DWORD dwReserved0;  
DWORD dwReserved1;  
TCHAR cFileName[MAX_PATH];  
TCHAR cAlternateFileName[ 14 ];
} WIN32_FIND_DATA;

И что же, все тебе из этого нужно ?
Даже dwReserved0 и dwReserved1 ?
Не поверю.
К тому же , там уже есть cFileName, зачем тогда еще и твой отдельностоящий
LPTSTR szFilePath;
?
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Про память (незнаю как еще назвать)...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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