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