Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / выделение памяти / 13 сообщений из 13, страница 1 из 1
03.12.2010, 17:05
    #36994094
Иван4444
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение памяти
Всем доброго дня.
Как выделить/зарезервировать на жестком диске сразу 4-5 гигабайт? Имеется ввиду, непрерывной области, чтоб не фрагментировалась (хочу сделать по аналогии с закачкой торрентов).
...
Рейтинг: 0 / 0
03.12.2010, 17:08
    #36994106
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение памяти
Это ты программу хочешь написать, или использовать какую-то готовую утилиту ?
...
Рейтинг: 0 / 0
03.12.2010, 17:12
    #36994120
Иван4444
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение памяти
Хочу понять как они это делают.
...
Рейтинг: 0 / 0
03.12.2010, 17:13
    #36994128
Иван4444
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение памяти
т.е. правильней было бы сказать, да - свою программу.
Но мне непонятно как это сделать. Как правило этим занимается ОС?
или же средствами С++ как то делается?
...
Рейтинг: 0 / 0
03.12.2010, 17:19
    #36994149
Берлuнгер
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение памяти
google seekp

(в vb6 такая фича прокатывала: я открываю файл, делаю seek на 4гб, пишу 1 байт - сохраняю файл. результат - ОЧЕНЬ быстрое выделение места под файл)
...
Рейтинг: 0 / 0
03.12.2010, 17:26
    #36994181
Иван4444
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение памяти
то Берлuнгер:
большое спасибо, попробую.

Модератор: Тема перенесена из форума "C++".
...
Рейтинг: 0 / 0
03.12.2010, 18:13
    #36994341
Иван4444
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение памяти
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#include "stdafx.h"
#include <fstream>
#include <iostream>

using namespace std;

int main()
{
	ofstream myfile;
        myfile.open ("c:\\test.myfile");
	myfile.seekp ( 1024  *  1024  *  1024 );
	myfile.write ("1", 2 ); //  1024 (byte)

	myfile.close();
	return  0 ;
}

Работает довольно долго
...
Рейтинг: 0 / 0
03.12.2010, 18:13
    #36994344
Иван4444
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение памяти
Выделить же объем в 4Гб вообще не может.
...
Рейтинг: 0 / 0
03.12.2010, 18:42
    #36994398
Иван4444
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение памяти
При таком подходе:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#include "stdafx.h"
#include <fstream>
#include <iostream>

using namespace std;

int main()
{
	unsigned long pos =  1024  *  1024  *  1024  *  2 ; //  1024 (byte)

	ofstream myfile;
        myfile.open ("c:\\test.myfile");
	myfile.seekp(pos);
	myfile.write("1", 1 );

	myfile.close();
	return  0 ;
}

Мы заметно долго выделяем 2Гб. Переварить 4Гб неможем даже с помощью unsigned __64.
Файловая система NTFS.
...
Рейтинг: 0 / 0
03.12.2010, 18:48
    #36994407
Берлuнгер
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение памяти
Код: 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.
#include <fstream>
#include <iostream>
#include <time.h>

#include <windows.h>

using namespace std;


void SetFileSize(HANDLE hFile, LONG size)
{
	SetFilePointer(hFile, size, NULL, FILE_BEGIN);
	SetEndOfFile(hFile);
}


int main()
{
	HANDLE f = CreateFile("test2.txt", GENERIC_WRITE,  0 ,  0 , CREATE_ALWAYS,  0 ,  0 );
	SetFileSize(f,  1024 * 1024 * 1024 );
	CloseHandle(f);

	return  0 ;
}

...
Рейтинг: 0 / 0
03.12.2010, 18:58
    #36994425
raidan2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение памяти
Винда?

Код: plaintext
1.
fsutil file createnew
...
Рейтинг: 0 / 0
03.12.2010, 19:01
    #36994431
Берлuнгер
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение памяти
на 32 битной винде выделяет 3.5гб мгновенно... надо бы на 64 битной проверить

Код: 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.
#include <fstream>
#include <iostream>
#include <time.h>

#include <windows.h>

using namespace std;


void SetFileSize(HANDLE hFile, LARGE_INTEGER size)
{
	SetFilePointerEx(hFile, size, NULL, FILE_BEGIN);
	SetEndOfFile(hFile);
}

int main()
{
	HANDLE f = CreateFile("test2.txt", GENERIC_WRITE,  0 ,  0 , CREATE_ALWAYS,  0 ,  0 );
	LARGE_INTEGER l;
	l.HighPart =  8 ;	
	l.HighPart *=  1024 ;
	l.HighPart *=  1024 ;
	l.HighPart *=  1024 ;
	SetFileSize(f, l);
	CloseHandle(f);

	return  0 ;
}

...
Рейтинг: 0 / 0
03.12.2010, 19:05
    #36994438
Иван4444
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выделение памяти
Берлuнгерна 32 битной винде выделяет 3.5гб мгновенно... надо бы на 64 битной проверить

+
Код: 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.
#include <fstream>
#include <iostream>
#include <time.h>

#include <windows.h>

using namespace std;


void SetFileSize(HANDLE hFile, LARGE_INTEGER size)
{
	SetFilePointerEx(hFile, size, NULL, FILE_BEGIN);
	SetEndOfFile(hFile);
}

int main()
{
	HANDLE f = CreateFile("test2.txt", GENERIC_WRITE,  0 ,  0 , CREATE_ALWAYS,  0 ,  0 );
	LARGE_INTEGER l;
	l.HighPart =  8 ;	
	l.HighPart *=  1024 ;
	l.HighPart *=  1024 ;
	l.HighPart *=  1024 ;
	SetFileSize(f, l);
	CloseHandle(f);

	return  0 ;
}



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


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