Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: Общие вопросы по SP-Forth и др. общие вопросы |
|
|
Hishnik писал(а): Sotnik писал(а): Как работают эти слова? Комментов, как всегда, нет... https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-globalalloc Это в kernel32.dll, то есть можно просто руками, помимо Форта. Прочитал, понятно что можно получить. Буду потиху копать. Но без примера трудно будет.
[quote="Hishnik"][quote="Sotnik"]Как работают эти слова? Комментов, как всегда, нет... [/quote]https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-globalalloc Это в kernel32.dll, то есть можно просто руками, помимо Форта.[/quote] Прочитал, понятно что можно получить. Буду потиху копать. Но без примера трудно будет.
|
|
|
|
Добавлено: Пт фев 04, 2022 01:00 |
|
|
|
|
|
Заголовок сообщения: |
Re: Общие вопросы по SP-Forth и др. общие вопросы |
|
|
Sotnik писал(а): Как работают эти слова? Комментов, как всегда, нет... https://docs.microsoft.com/en-us/window ... lobalallocЭто в kernel32.dll, то есть можно просто руками, помимо Форта.
[quote="Sotnik"]Как работают эти слова? Комментов, как всегда, нет... [/quote] https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-globalalloc Это в kernel32.dll, то есть можно просто руками, помимо Форта.
|
|
|
|
Добавлено: Чт фев 03, 2022 21:40 |
|
|
|
|
|
Заголовок сообщения: |
Re: Общие вопросы по SP-Forth и др. общие вопросы |
|
|
Hishnik писал(а): Боюсь, в "распространенных" фортах этого никак не будет. Это malloc сделать руками и работать с полученным указателем. Главное мне понимать как это выглядит в работе. Код: \ Глобальная память, разделяемая между потоками d:\spf4-20\devel\~yz\lib\gmem.f \ Идея реализации - А. Черезов \ Ю. Жиловец, 17.12.2002
REQUIRE CZMOVE ~yz/lib/common.f MODULE: GMEM EXPORT : MALLOCATE ( u -- u-addr/0) 8 ( HEAP_ZERO_MEMORY) GetProcessHeap HeapAlloc ; : MFREE ( a-addr -- ?) 0 GetProcessHeap HeapFree ; : MGETMEM ( u -- a-addr ) MALLOCATE DUP IF 0 ELSE -300 THEN THROW ; : MFREEMEM ( a-addr -- ) MFREE ERR THROW ; : CMGETMEM ( a n -- a2) DUP 1+ MGETMEM 2DUP C! DUP >R 1+ SWAP CMOVE R> ; : CZMGETMEM ( a n -- a) DUP 1+ MGETMEM DUP >R CZMOVE R> ; : ZMGETMEM ( z -- a) ASCIIZ> CZMGETMEM ; ;MODULE Как работают эти слова? Комментов, как всегда, нет... Мне нужно для работы два массива по 4 гега. (или один на 8, но это под 64 бита) Есть два индекса, и гонять надо по массивам по кругу. Скомпилилось нормально.
[quote="Hishnik"]Боюсь, в "распространенных" фортах этого никак не будет. Это malloc сделать руками и работать с полученным указателем.[/quote] Главное мне понимать как это выглядит в работе.[code]\ Глобальная память, разделяемая между потоками d:\spf4-20\devel\~yz\lib\gmem.f \ Идея реализации - А. Черезов \ Ю. Жиловец, 17.12.2002
REQUIRE CZMOVE ~yz/lib/common.f MODULE: GMEM EXPORT : MALLOCATE ( u -- u-addr/0) 8 ( HEAP_ZERO_MEMORY) GetProcessHeap HeapAlloc ; : MFREE ( a-addr -- ?) 0 GetProcessHeap HeapFree ; : MGETMEM ( u -- a-addr ) MALLOCATE DUP IF 0 ELSE -300 THEN THROW ; : MFREEMEM ( a-addr -- ) MFREE ERR THROW ; : CMGETMEM ( a n -- a2) DUP 1+ MGETMEM 2DUP C! DUP >R 1+ SWAP CMOVE R> ; : CZMGETMEM ( a n -- a) DUP 1+ MGETMEM DUP >R CZMOVE R> ; : ZMGETMEM ( z -- a) ASCIIZ> CZMGETMEM ; ;MODULE[/code] Как работают эти слова? Комментов, как всегда, нет... :( Мне нужно для работы два массива по 4 гега. (или один на 8, но это под 64 бита) Есть два индекса, и гонять надо по массивам по кругу.
Скомпилилось нормально.
|
|
|
|
Добавлено: Чт фев 03, 2022 17:32 |
|
|
|
|
|
Заголовок сообщения: |
Re: Общие вопросы по SP-Forth и др. общие вопросы |
|
|
Боюсь, в "распространенных" фортах этого никак не будет. Это malloc сделать руками и работать с полученным указателем.
Боюсь, в "распространенных" фортах этого никак не будет. Это malloc сделать руками и работать с полученным указателем.
|
|
|
|
Добавлено: Чт фев 03, 2022 02:28 |
|
|
|
|
|
Заголовок сообщения: |
Re: Общие вопросы по SP-Forth и др. общие вопросы |
|
|
Hishnik писал(а): Sotnik писал(а): Как отобрать у винды максимально оперативной памяти? Необходим сегмент(ы) под адресацию в Win10x64. Как это вообще выглядит? Да никак особо, она не отбирается насовсем, а резервируется. Приложение думает, что у него все есть, ОС отдает реальные страницы по мере доступа к ним. Это на уровне rb rd (reserve bytes, reserve dwords). Мне нужно для работы два массива по 4 гега. (или один на 8, но это под 64 бита) Есть два индекса, и гонять надо по массивам по кругу. Можно пример рабочий, может это тут уже сто раз было, но я уже заколупываюсь перерывать все темы - инфы много.
[quote="Hishnik"][quote="Sotnik"]Как отобрать у винды максимально оперативной памяти? Необходим сегмент(ы) под адресацию в Win10x64. Как это вообще выглядит?[/quote]Да никак особо, она не отбирается насовсем, а резервируется. Приложение думает, что у него все есть, ОС отдает реальные страницы по мере доступа к ним. Это на уровне rb rd (reserve bytes, reserve dwords).[/quote]Мне нужно для работы два массива по 4 гега. (или один на 8, но это под 64 бита) Есть два индекса, и гонять надо по массивам по кругу. Можно пример рабочий, может это тут уже сто раз было, но я уже заколупываюсь перерывать все темы - инфы много.
|
|
|
|
Добавлено: Чт фев 03, 2022 02:26 |
|
|
|
|
|
Заголовок сообщения: |
Re: Общие вопросы по SP-Forth и др. общие вопросы |
|
|
Sotnik писал(а): Как отобрать у винды максимально оперативной памяти? Необходим сегмент(ы) под адресацию в Win10x64. Как это вообще выглядит?
Да никак особо, она не отбирается насовсем, а резервируется. Приложение думает, что у него все есть, ОС отдает реальные страницы по мере доступа к ним. Это на уровне rb rd (reserve bytes, reserve dwords).
[quote="Sotnik"]Как отобрать у винды максимально оперативной памяти? Необходим сегмент(ы) под адресацию в Win10x64. Как это вообще выглядит? [/quote] Да никак особо, она не отбирается насовсем, а резервируется. Приложение думает, что у него все есть, ОС отдает реальные страницы по мере доступа к ним. Это на уровне rb rd (reserve bytes, reserve dwords).
|
|
|
|
Добавлено: Чт фев 03, 2022 01:56 |
|
|
|
|
|
Заголовок сообщения: |
Вся память. |
|
|
Как отобрать у винды максимально оперативной памяти? Необходим сегмент(ы) под адресацию в Win10x64. Как это вообще выглядит? Это прочитал. viewtopic.php?p=199#p199Кое что прояснилось со структурой кишек винды: viewtopic.php?p=5754#p5754
Как отобрать у винды максимально оперативной памяти? Необходим сегмент(ы) под адресацию в Win10x64. Как это вообще выглядит?
Это прочитал. http://fforum.winglion.ru/viewtopic.php?p=199#p199 Кое что прояснилось со структурой кишек винды: http://fforum.winglion.ru/viewtopic.php?p=5754#p5754
|
|
|
|
Добавлено: Ср фев 02, 2022 22:00 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Главное к Пушкину не посылайте, иногда действительно проще спросить, чем успеть разобраться (у меня другой язык по работе, времени не хватает).
Главное к Пушкину не посылайте, иногда действительно проще спросить, чем успеть разобраться (у меня другой язык по работе, времени не хватает).
|
|
|
|
Добавлено: Вт сен 16, 2008 20:59 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Переправил честно - до твоего замечания.
Переправил честно - до твоего замечания.
|
|
|
|
Добавлено: Вт сен 16, 2008 20:52 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Нечестно, переправил задним временем
Нечестно, переправил задним временем :))
|
|
|
|
Добавлено: Вт сен 16, 2008 20:48 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Pretorian писал(а): его надо к
так он там и стоит.
[quote="Pretorian"]его надо к[/quote]
так он там и стоит. :))
|
|
|
|
Добавлено: Вт сен 16, 2008 20:47 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Код: CODE RP+@ ( offs -- x ) \ взять число со смещением offs байт от вершины стека возвратов (0 RP+ == RP@)
Так комент (0 RP+ == RP@) теперь правилен, но не в том слове ))) его надо к Код: CODE RP+ ( offs -- addr )
[code] CODE RP+@ ( offs -- x ) \ взять число со смещением offs байт от вершины стека возвратов (0 RP+ == RP@) [/code] Так комент (0 RP+ == RP@) теперь правилен, но не в том слове :))))) его надо к [code] CODE RP+ ( offs -- addr ) [/code]
|
|
|
|
Добавлено: Вт сен 16, 2008 20:44 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Pretorian писал(а): 0 RP+@ ни как не могут быть равны RP@, потому что первое это данные с адреса стека, а второе адрес стека (возвратов).
P.S. В какое место непонятный асм приткнуть (если сам запутался)?
Нет не запутался - а тоже устал.
Исправлял другие строки(смотри внимательно), вот эти:
Код: 8B C, 44 C, 04 C, 04 C, \ MOV EAX, 4 [EAX] [ESP] 8D C, 44 C, 04 C, 04 C, \ LEA EAX, 4 [EAX] [ESP] на эти: Код: 8B C, 44 C, 04 C, 04 C, \ MOV EAX, 4 [ESP][EAX] 8D C, 44 C, 04 C, 04 C, \ LEA EAX, 4 [ESP][EAX] а про то, что уже проехали и забыл. Ну и окончательно все должно быть так: Код: CODE RP+@ ( offs -- x ) \ взять число со смещением offs байт от вершины стека возвратов 8B C, 44 C, 04 C, 04 C, \ MOV EAX, 4 [ESP][EAX] RET END-CODE CODE RP+ ( offs -- addr ) \ взять адрес со смещением offs байт от вершины стека возвратов(0 RP+ == RP@) 8D C, 44 C, 04 C, 04 C, \ LEA EAX, 4 [ESP][EAX] RET END-CODE
[quote="Pretorian"]0 RP+@ ни как не могут быть равны RP@, потому что первое это данные с адреса стека, а второе адрес стека (возвратов).
P.S. В какое место непонятный асм приткнуть (если сам запутался)?[/quote]
Нет не запутался - а тоже устал. :(
Исправлял другие строки(смотри внимательно), вот эти:
[code]8B C, 44 C, 04 C, 04 C, \ MOV EAX, 4 [EAX] [ESP] 8D C, 44 C, 04 C, 04 C, \ LEA EAX, 4 [EAX] [ESP] [/code] на эти: [code]8B C, 44 C, 04 C, 04 C, \ MOV EAX, 4 [ESP][EAX] 8D C, 44 C, 04 C, 04 C, \ LEA EAX, 4 [ESP][EAX][/code] а про то, что уже проехали и забыл. Ну и окончательно все должно быть так: [code]CODE RP+@ ( offs -- x ) \ взять число со смещением offs байт от вершины стека возвратов 8B C, 44 C, 04 C, 04 C, \ MOV EAX, 4 [ESP][EAX] RET END-CODE CODE RP+ ( offs -- addr ) \ взять адрес со смещением offs байт от вершины стека возвратов(0 RP+ == RP@) 8D C, 44 C, 04 C, 04 C, \ LEA EAX, 4 [ESP][EAX] RET END-CODE [/code]
|
|
|
|
Добавлено: Вт сен 16, 2008 20:39 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
chess писал(а): При внимательном просмотре ошибок в комментариях еще больше. Правильно тут будет так: Код: CODE RP+@ ( offs -- x ) \ взять число со смещением offs байт от вершины стека возвратов (0 RP+@ == RP@) 8B C, 44 C, 04 C, 04 C, \ MOV EAX, 4 [ESP][EAX] RET END-CODE CODE RP+ ( offs -- addr ) \ взять адрес со смещением offs байт от вершины стека возвратов 8D C, 44 C, 04 C, 04 C, \ LEA EAX, 4 [ESP][EAX] RET END-CODE
0 RP+@ ни как не могут быть равны RP@, потому что первое это данные с адреса стека, а второе адрес стека (возвратов).
P.S. В какое место непонятный асм приткнуть (если сам запутался)?
[quote="chess"] При внимательном просмотре ошибок в комментариях еще больше. Правильно тут будет так: [code]CODE RP+@ ( offs -- x ) \ взять число со смещением offs байт от вершины стека возвратов (0 RP+@ == RP@) 8B C, 44 C, 04 C, 04 C, \ MOV EAX, 4 [ESP][EAX] RET END-CODE CODE RP+ ( offs -- addr ) \ взять адрес со смещением offs байт от вершины стека возвратов 8D C, 44 C, 04 C, 04 C, \ LEA EAX, 4 [ESP][EAX] RET END-CODE[/code] [/quote]
0 RP+@ ни как не могут быть равны RP@, потому что первое это данные с адреса стека, а второе адрес стека (возвратов).
P.S. В какое место непонятный асм приткнуть (если сам запутался)?
|
|
|
|
Добавлено: Вт сен 16, 2008 20:07 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
вот они, смертельные "детские" вопросы
вот они, смертельные "детские" вопросы
|
|
|
|
Добавлено: Вт сен 16, 2008 15:31 |
|
|
|
|