forked from KolibriOS/kolibrios
no need for manual heap initialization (68.11)
git-svn-id: svn://kolibrios.org@6893 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
5ac8ef4526
commit
a4a06a81a0
kernel/trunk
@ -595,19 +595,13 @@ endp
|
||||
|
||||
align 4
|
||||
proc user_alloc stdcall, alloc_size:dword
|
||||
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
|
||||
mov ebx, [current_process]
|
||||
push ebx esi edi
|
||||
call init_heap
|
||||
lea ecx, [ebx+PROC.heap_lock]
|
||||
call mutex_lock
|
||||
|
||||
mov ecx, [alloc_size]
|
||||
add ecx, (4095+PAGE_SIZE)
|
||||
and ecx, not 4095
|
||||
|
||||
mov esi, dword [ebx+PROC.heap_base] ; heap_base
|
||||
mov edi, dword [ebx+PROC.heap_top] ; heap_top
|
||||
.scan:
|
||||
|
@ -2577,8 +2577,6 @@ dword-значение цвета 0x00RRGGBB
|
||||
* 3 = RAW
|
||||
* 4 и выше зарезервировано
|
||||
* +8: более детально смотрите файл clipboard_container_rus.txt
|
||||
* Функция должна использоваться совместно с 68.11. Приложение должно
|
||||
предварительно проинициализировать локальную кучу вызовом 68.11.
|
||||
|
||||
---------------------- Константы для регистров: ----------------------
|
||||
eax - SF_CLIPBOARD (54)
|
||||
@ -2991,10 +2989,8 @@ IPC применяется для посылок сообщений от одн
|
||||
* eax = 1 - недостаточно памяти
|
||||
Замечания:
|
||||
* Есть другой способ выделения/освобождения динамической памяти -
|
||||
подфункции 11, 12, 13 функции 68.
|
||||
* Функция не может использоваться совместно с 68.11, 68.12, 68.13.
|
||||
Вызов функции будет игнорироваться, если приложение создаст
|
||||
локальную кучу вызовом 68.11.
|
||||
подфункции 12, 13 и 20 функции 68, но после их использования будет
|
||||
создана куча процесса и вызов функции 64 будет игнорироваться.
|
||||
|
||||
---------------------- Константы для регистров: ----------------------
|
||||
eax - SF_MEMORY_RESIZE (64)
|
||||
@ -3296,7 +3292,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
||||
eax - SF_SYS_MISC (68)
|
||||
ebx - SSF_WRITE_MSR (4)
|
||||
======================================================================
|
||||
===== Функция 68, подфункция 11 - инициализировать кучу процесса. ====
|
||||
= Функция 68, подфункция 11 - вручную инициализировать кучу процесса =
|
||||
======================================================================
|
||||
Параметры:
|
||||
* eax = 68 - номер функции
|
||||
@ -3306,10 +3302,9 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
||||
* иначе размер созданной кучи
|
||||
Замечания:
|
||||
* Вызов функции инициализирует кучу, из которой впоследствии можно
|
||||
выделять и освобождать блоки памяти подфункциями 12 и 13.
|
||||
выделять и освобождать блоки памяти подфункциями 12, 13 и 20.
|
||||
* Если куча уже создана, функция вернёт размер существующей кучи.
|
||||
Размер кучи равен размеру всей свободной памяти приложения.
|
||||
* При повторном вызове функции тем же процессом функция вернёт
|
||||
размер существующей кучи.
|
||||
* После создания кучи вызовы функции 64 игнорируются.
|
||||
|
||||
---------------------- Константы для регистров: ----------------------
|
||||
@ -3325,8 +3320,6 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
||||
Возвращаемое значение:
|
||||
* eax = указатель на выделенный блок
|
||||
Замечания:
|
||||
* Предварительно следует инициализировать кучу процесса вызовом
|
||||
подфункции 11.
|
||||
* Функция выделяет целое число страниц (4 Кб) так, что фактический
|
||||
размер выделенного блока больше или равен запрошенному.
|
||||
|
||||
@ -3454,8 +3447,6 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
||||
Возвращаемое значение:
|
||||
* eax = указатель на перераспределённый блок, 0 при ошибке
|
||||
Замечания:
|
||||
* Предварительно следует инициализировать кучу процесса вызовом
|
||||
подфункции 11.
|
||||
* Функция выделяет целое число страниц (4 Кб) так, что фактический
|
||||
размер выделенного блока больше или равен запрошенному.
|
||||
* Если edx=0, то вызов функции эквивалентен выделению памяти
|
||||
@ -3519,8 +3510,6 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
||||
* E_NOMEM = 30
|
||||
* E_PARAM = 33
|
||||
Замечания:
|
||||
* Предварительно следует инициализировать кучу процесса вызовом
|
||||
подфункции 11.
|
||||
* Если создаётся новая область, то флаги доступа устанавливают
|
||||
максимальные права доступа для остальных процессов. Попытка
|
||||
открытия другим потоком с неразрешёнными правами провалится
|
||||
|
@ -2548,9 +2548,6 @@ Returned value:
|
||||
* eax = if successful - pointer to a memory with data
|
||||
* eax = 1 - error
|
||||
* eax = -1 - main list area not found
|
||||
Remarks:
|
||||
* The function must be used in conjunction with 68.11. The
|
||||
application must pre-initialize the local heap by calling 68.11.
|
||||
|
||||
---------------------- Constants for registers: ----------------------
|
||||
eax - SF_CLIPBOARD (54)
|
||||
@ -2958,10 +2955,8 @@ Returned value:
|
||||
* eax = 1 - not enough memory
|
||||
Remarks:
|
||||
* There is another way to dynamically allocate/free memory -
|
||||
subfunctions 11, 12, 13 of function 68.
|
||||
* The function cannot be used together with 68.11, 68.12, 68.13.
|
||||
The function call will be ignored after creation of process heap
|
||||
with function 68.11.
|
||||
subfunctions 12, 13 and 20 of function 68, but after creation
|
||||
of the process heap 64 function call will be ignored.
|
||||
|
||||
---------------------- Constants for registers: ----------------------
|
||||
eax - SF_MEMORY_RESIZE (64)
|
||||
@ -3263,7 +3258,7 @@ Remarks:
|
||||
eax - SF_SYS_MISC (68)
|
||||
ebx - SSF_WRITE_MSR (4)
|
||||
======================================================================
|
||||
======= Function 68, subfunction 11 - initialize process heap. =======
|
||||
=== Function 68, subfunction 11 - manually initialize process heap ===
|
||||
======================================================================
|
||||
Parameters:
|
||||
* eax = 68 - function number
|
||||
@ -3272,11 +3267,10 @@ Returned value:
|
||||
* eax = 0 - failed
|
||||
* otherwise size of created heap
|
||||
Remarks:
|
||||
* The function call initializes heap, from which one can in future
|
||||
allocate and free memory blocks with subfunctions 12 and 13.
|
||||
* The function call initializes heap for subfunctions 12, 13 and 20.
|
||||
* If the process heap is already created, this function will return
|
||||
the size of the existing heap.
|
||||
Heap size is equal to total amount of free application memory.
|
||||
* The second function call from the same process results in
|
||||
returning the size of the existing heap.
|
||||
* After creation of the heap calls to function 64 will be ignored.
|
||||
|
||||
---------------------- Constants for registers: ----------------------
|
||||
@ -3292,8 +3286,6 @@ Parameters:
|
||||
Returned value:
|
||||
* eax = pointer to the allocated block
|
||||
Remarks:
|
||||
* Before this call one must initialize process heap by call to
|
||||
subfunction 11.
|
||||
* The function allocates an integer number of pages (4 Kb) in such
|
||||
way that the real size of allocated block is more than or equal to
|
||||
requested size.
|
||||
@ -3421,8 +3413,6 @@ Parameters:
|
||||
Returned value:
|
||||
* eax = pointer to the reallocated block, 0 = error
|
||||
Remarks:
|
||||
* Before this call one must initialize process heap by call to
|
||||
subfunction 11.
|
||||
* The function allocates an integer number of pages (4 Kb) in such
|
||||
way that the real size of allocated block is more than or equal to
|
||||
requested size.
|
||||
@ -3485,8 +3475,6 @@ Error codes:
|
||||
* E_NOMEM = 30
|
||||
* E_PARAM = 33
|
||||
Remarks:
|
||||
* Before this call one must initialize process heap by call to
|
||||
subfunction 11.
|
||||
* If a new area is created, access flags set maximal rights
|
||||
for other processes. An attempt from other process to open
|
||||
with denied rights will fail with error code E_ACCESS.
|
||||
|
Loading…
Reference in New Issue
Block a user