Pisane za X-Box
19 отговора
674 прегледа
Pisane za X-Box
Zdraviete,
ima li niakoi, deto da e pisal (da de, programiral) za X-Box, da obiasni kakvi sa razlikite sys PC-programiraneto.
Ako ne, pone da dade links s poveche info po vyprosa.
Symphonie No9, Beethoven...
ima li niakoi, deto da e pisal (da de, programiral) za X-Box, da obiasni kakvi sa razlikite sys PC-programiraneto.
Ako ne, pone da dade links s poveche info po vyprosa.
Symphonie No9, Beethoven...
Re: Pisane za X-Box
render pisal li si?
ako si da ti obiasnia kakva e razlikata, ako ne si da ne si gubia vremeto
ako si da ti obiasnia kakva e razlikata, ako ne si da ne si gubia vremeto
Re: Pisane za X-Box
1. Fixirana pamet ot 64MB (128MB pri devkita) - tova oznachawa che memory managera trjabwa da ti e dobre napisan, no sushto i nachina po kojto wzimash / osvobozhdawash pamet da ne razpokuswa prednata. Dobre e naprimer ako imash mnogo obekti ot edin i susht klas (podrazbiram edin i susht razmer) da gi nahakash wuw statichno alokiran MemoryPool - naprimer wmesto za wseki particle ot renderata ti alokirash pamet - alokiraj za 1000 - 2000 partikla neprekusnata pamet i ja izpolzwaj ot tam.
2. Njamash swap-pamet (wupreki che imash hard-drive) - i prilozhenieto ti raboti w ring0.
3. Njama specializirana video i audio pamet - wsichko e UMA - wsichko e widimo ot convencionalnata pamet.
4. Wupreki che za w budeshte Microsoft shte predlagat wuzmozhnost da predostawjash patchove za igrite si - po princip w konsolnia svjat - patcha e neshto nemislino - ili newuzmozhno - edin put izdokarana na CD ili DVD igrata - tja pochti winagi raboti ot CD-to ili DVD-to i njama kak da se slozhi patcha. No XBOX ima harddrive - i eventualno patchwane za w budeshteto shte e wuzmozhno. (10GB - za wsjako prilozhenie po 2GB - asenski e ako e tuka da me popravi :) - ne sum mnogo siguren kolko na prilozhenie se otpuska).
5. Ako mozhe da izbjagwash STL-a, i wuobshte wsjakakwo bloatwane na kod, fragmentirane na pamet i t.n.t.k shte e naj-dobre. No tuj kato tova dosta shte ogranichi wuzmozhnostite na njakoi, dobre e prosto ot STL da se izkarat ili prenapishat template clasove udobni za tekushti proekt (kakvo trjabwa) - njama i da ima nuzhda da sa tolkova universalni. Oshte edin problem pri izpolzwaneteo na C++ sus templati e slozhnostta na debugwane - trudno e naprimer da widish elementite na daden std::vector<> ili std::list<> dokato debugwash.
6. Ako pishesh samo za XBOX (i PC) e idealno - ima strashno mnogo toolove i biblioteki koito lesno shte ti pomognat da osushtestwish mechtite si :)... Problema e ako pishesh multiplatformenio (kato nas :() - za PS2 i GC - PS2 i GC sa dosta po-ogranicheni w njakoi otnoshenia kum XBOX-a i sushto tehnia tool-path (proizwodstwo na texturi, zwuk, podreba i izpolzwane w konsolata) e dosta po-razlichen. Zatova se nalaga da namerish obshtoto mezhdu wsichki tjah konsoli i da poemesh svoi toolpath - svoi toolove/exporteri/biblioteki. Pochti winagi se nalaga da wrpawash DirectSound-a, DirectX prez svoi neshta - i chesto da ne mozhe da se wuzpolzwash napulno ot wuzmozhnosttite.
Drugo koeto znam (no ne se zanimawam s rendera) - e che XBOX Shaderite imat malki razliki ot tezi za GeForce3/4 PC.
Edin pljus kum XBOX programiraneto e che njama nuzhda da pravish poddruzhka za sumati drugi video & audio platki - pishesh samo za edna i njamash uslovni if-ove za drugite.
Microsoft (kakto i Sony i Nintendo) imat taka narechenite Requirments - tova sa pravila, zakoni, napustwia - kak trjabwa da se durzhi igrata ti, i kak da reagira na usera. Kakvi suobshtenia i koga da pokazwa... Tova e koeto ponjkoga ubiva naj-goljmata chast ot wremeto.. Pri PC igri chesto shte widish - che dokato zarezhdat ili spirat frame - ili nakuswat audioto, ili chesto framerate - pri consolnite igri na tova ne se gleda s dobro oko - ili poddruzash 30fps ili 60fps ili prosto fps mezhdu tjah koeto da ne drazni (no e za izbjagwane).
Microsoft redlagat (ili pone predlagaha) taka narechenia XBOX Incubator Program - ako imash idea, design, i tech-demo na igrata si (za PC mislja che) - ti davat 6 mesetza i free dev-kitove da uspeesh da realizirash igrata si do njakakwo dobro nivo - sled tova ako ja haresat - mozhe da ti stanat i publisheri.
Ako samo pitash zashtoto tursish rabota - to togava ne se pritesnjawaj - njama koj znae kakva razlika ot PC programiraneto - prosto trjabwa da swiknesh che debugwash neshto koeto ne wurwi na tvojata mashina - a e svurzano prez kabel do neja (pochti kato remote-debugginga) - tova dori e dosta po-dobre - zashtoto izstradali znajat kolko e trudno da debugwash DirectX prilozhenie tochno dokato njakoi specialini surfacei w directX-a s locknati - tuka tova ne se nalaga.
tirulirutatuutuu
2. Njamash swap-pamet (wupreki che imash hard-drive) - i prilozhenieto ti raboti w ring0.
3. Njama specializirana video i audio pamet - wsichko e UMA - wsichko e widimo ot convencionalnata pamet.
4. Wupreki che za w budeshte Microsoft shte predlagat wuzmozhnost da predostawjash patchove za igrite si - po princip w konsolnia svjat - patcha e neshto nemislino - ili newuzmozhno - edin put izdokarana na CD ili DVD igrata - tja pochti winagi raboti ot CD-to ili DVD-to i njama kak da se slozhi patcha. No XBOX ima harddrive - i eventualno patchwane za w budeshteto shte e wuzmozhno. (10GB - za wsjako prilozhenie po 2GB - asenski e ako e tuka da me popravi :) - ne sum mnogo siguren kolko na prilozhenie se otpuska).
5. Ako mozhe da izbjagwash STL-a, i wuobshte wsjakakwo bloatwane na kod, fragmentirane na pamet i t.n.t.k shte e naj-dobre. No tuj kato tova dosta shte ogranichi wuzmozhnostite na njakoi, dobre e prosto ot STL da se izkarat ili prenapishat template clasove udobni za tekushti proekt (kakvo trjabwa) - njama i da ima nuzhda da sa tolkova universalni. Oshte edin problem pri izpolzwaneteo na C++ sus templati e slozhnostta na debugwane - trudno e naprimer da widish elementite na daden std::vector<> ili std::list<> dokato debugwash.
6. Ako pishesh samo za XBOX (i PC) e idealno - ima strashno mnogo toolove i biblioteki koito lesno shte ti pomognat da osushtestwish mechtite si :)... Problema e ako pishesh multiplatformenio (kato nas :() - za PS2 i GC - PS2 i GC sa dosta po-ogranicheni w njakoi otnoshenia kum XBOX-a i sushto tehnia tool-path (proizwodstwo na texturi, zwuk, podreba i izpolzwane w konsolata) e dosta po-razlichen. Zatova se nalaga da namerish obshtoto mezhdu wsichki tjah konsoli i da poemesh svoi toolpath - svoi toolove/exporteri/biblioteki. Pochti winagi se nalaga da wrpawash DirectSound-a, DirectX prez svoi neshta - i chesto da ne mozhe da se wuzpolzwash napulno ot wuzmozhnosttite.
Drugo koeto znam (no ne se zanimawam s rendera) - e che XBOX Shaderite imat malki razliki ot tezi za GeForce3/4 PC.
Edin pljus kum XBOX programiraneto e che njama nuzhda da pravish poddruzhka za sumati drugi video & audio platki - pishesh samo za edna i njamash uslovni if-ove za drugite.
Microsoft (kakto i Sony i Nintendo) imat taka narechenite Requirments - tova sa pravila, zakoni, napustwia - kak trjabwa da se durzhi igrata ti, i kak da reagira na usera. Kakvi suobshtenia i koga da pokazwa... Tova e koeto ponjkoga ubiva naj-goljmata chast ot wremeto.. Pri PC igri chesto shte widish - che dokato zarezhdat ili spirat frame - ili nakuswat audioto, ili chesto framerate - pri consolnite igri na tova ne se gleda s dobro oko - ili poddruzash 30fps ili 60fps ili prosto fps mezhdu tjah koeto da ne drazni (no e za izbjagwane).
Microsoft redlagat (ili pone predlagaha) taka narechenia XBOX Incubator Program - ako imash idea, design, i tech-demo na igrata si (za PC mislja che) - ti davat 6 mesetza i free dev-kitove da uspeesh da realizirash igrata si do njakakwo dobro nivo - sled tova ako ja haresat - mozhe da ti stanat i publisheri.
Ako samo pitash zashtoto tursish rabota - to togava ne se pritesnjawaj - njama koj znae kakva razlika ot PC programiraneto - prosto trjabwa da swiknesh che debugwash neshto koeto ne wurwi na tvojata mashina - a e svurzano prez kabel do neja (pochti kato remote-debugginga) - tova dori e dosta po-dobre - zashtoto izstradali znajat kolko e trudno da debugwash DirectX prilozhenie tochno dokato njakoi specialini surfacei w directX-a s locknati - tuka tova ne se nalaga.
tirulirutatuutuu
Re: Pisane za X-Box
"....Drugo koeto znam (no ne se zanimawam s rendera) - e che XBOX Shaderite imat malki razliki ot tezi za GeForce3/4 PC. ... "
tam sa golemite razliki !!!
tva deto go razpraviash s memory-to taka ili ina4e i na PC trebe da se pravi ina4e ebati programistite ia pishat taia igra
align-vane, index-irane, novi instrukcii, v novoto XDK ima novi #pragma za shaderite too
cialata particle systema moe da ti e na na shaders i samo na shaders
4aj da izdam
sega pisha shaders za hologrami i polymorph na skinove
mnogo iako stava
ama stiga tolkoz nema da izdavam pove4e
are
X
ti malkia v koja company ba4kash?
tam sa golemite razliki !!!
tva deto go razpraviash s memory-to taka ili ina4e i na PC trebe da se pravi ina4e ebati programistite ia pishat taia igra
align-vane, index-irane, novi instrukcii, v novoto XDK ima novi #pragma za shaderite too
cialata particle systema moe da ti e na na shaders i samo na shaders
4aj da izdam
sega pisha shaders za hologrami i polymorph na skinove
mnogo iako stava
ama stiga tolkoz nema da izdavam pove4e
are
X
ti malkia v koja company ba4kash?
Re: Pisane za X-Box
wuw Treyarch sum - no ni kupiha i sega sme wutreshno studio na Activision. No igrata kojato pishem (NHL2K3) wsushnost e za SEGA - prosto predi da ni kupjat imahme wzimane dawane s tjah i oshte produlzhawame.... Ne che obicham hockey - ma ko da sa prai :)
a ti kude si?
kolkoto do rendera - az se zanimawam samo s audioto za trite platformi, i specialna poddruzhka na PS2 platformata (takuv ma slozhiha) - grafika ne sum baral ot weche she stane dve godini :)
inache sme sus July XDK-to
a kolkoto do dobro izpolzwane na pametta ot PC programisti - silno se sumnjawam :) - kato widish che Everquesta iska takiva iziskwanajia - prosto da padladeesh :) - ne seriozno, PC programistite sa go udarili na wzimane na cjalata pamet za tehni nuzhdi :) hehehe.
tirulirutatuutuu
a ti kude si?
kolkoto do rendera - az se zanimawam samo s audioto za trite platformi, i specialna poddruzhka na PS2 platformata (takuv ma slozhiha) - grafika ne sum baral ot weche she stane dve godini :)
inache sme sus July XDK-to
a kolkoto do dobro izpolzwane na pametta ot PC programisti - silno se sumnjawam :) - kato widish che Everquesta iska takiva iziskwanajia - prosto da padladeesh :) - ne seriozno, PC programistite sa go udarili na wzimane na cjalata pamet za tehni nuzhdi :) hehehe.
tirulirutatuutuu
Re: Memory Menager
Какво разбираш под добренаписан ММ.Защо мислиш,че дрябва да се пише такъв?Защо да не се ползва ММ на С?Ако трябва все пак да се напише,то какви характеристики следва да има.Моя опит с писане на ММ свърши печално.
Аз пиша само за Win2000 и WinXP.Там има огромни тънкости и ако ММ трябва да се напише да поддържа всички видове памет става ужас,а ако е само паметта чети/пиши/изпълни може без угризения на съвеста да се ползва С менаджера(malloc ,realloc,free,memmovwe,memset и др.).Единствената причина поради която може да се пише собствен ММ е,че ще се получи контрол.Особено печално е заключването на паметта VirtualLock да ама се заключват цели страници.Така неминуемо ще се засегнат съседни блокове,и от тук се отказах от заключване на паметта.Ако се откажа по такъв начин и от други характеристики по-добре на ползвам С ММ.
Какви са твоите виждания malkia?
Аз пиша само за Win2000 и WinXP.Там има огромни тънкости и ако ММ трябва да се напише да поддържа всички видове памет става ужас,а ако е само паметта чети/пиши/изпълни може без угризения на съвеста да се ползва С менаджера(malloc ,realloc,free,memmovwe,memset и др.).Единствената причина поради която може да се пише собствен ММ е,че ще се получи контрол.Особено печално е заключването на паметта VirtualLock да ама се заключват цели страници.Така неминуемо ще се засегнат съседни блокове,и от тук се отказах от заключване на паметта.Ако се откажа по такъв начин и от други характеристики по-добре на ползвам С ММ.
Какви са твоите виждания malkia?
Re: Pisane za X-Box
I az tursq malko powe4e info po wyprosa. No s Incubator-a na microsoft ne mislq da probwam zastoto samo ako pises 4e si Bulgarska compania i woobste nqma da polu4i6 obraten otgowor. Za towa ako nqkoi ot kolegite (osobenno ot tezi koito rabotqt w zapadni firmi) moze da dade nqkwa informaciq po wyprosa ste mu buda mnogo blagodaren. Absolutno siguren sym 4e pisaneto stawa na DX8(za rendera) no moze bi ima nqkoi promani w uprawlenieto na pametta. A za sadersite se symnqwam da ima nqkwa razlika ot tezi za convencionalen GF3 . Po otnosennie na
#pragma - ta za koito pisete towa da ne e ot naowiqt Cg (C for graphics) na NVidia zastoto tam widqh nqkoi takiwa nesta no taka ili ina4e Cg translira wsi4ko w shadersi KVO MISLITE ZA RADEON 9700????????
#pragma - ta za koito pisete towa da ne e ot naowiqt Cg (C for graphics) na NVidia zastoto tam widqh nqkoi takiwa nesta no taka ili ina4e Cg translira wsi4ko w shadersi KVO MISLITE ZA RADEON 9700????????
Re: Memory Menager
ами факта че имаш по голям контрол върху управлението на паметта изобщо не е за пренебрегване - най-малкото при дебъгването е от голяма полза (нашия ММ има 3 версии - много различни при това - 2 за дебъг и една release)...освен това в твоя ММ може (и трябва) да вкараш някаква форма на поддръжка на pool-ове което върши голяма работа при наличие на много еднотипни обекти (а в една игра със сигурност има такива). а иначе естествено може да се напише игра и като използваш С ММ - обаче аз лично предпочитам стотиците хиляди алокации дето се извършват при една сесия на софт-а да минават през мой код :)
бтв, под ММ разбирам само aлокиране/деалокиране/реалокиране частта - за всичко останало (memset, etc) може спокойно да се ползват функциите на компилатора - при някои компилатори са яко оптимизирани
и само не разбрах за какво ти е VirtualLock - освен нещо за дебъгване не виждам за кво друго ще ти свърши работа - едва ли ще искаш да вършиш на ОС-а работата по swap-енето :)
бтв, под ММ разбирам само aлокиране/деалокиране/реалокиране частта - за всичко останало (memset, etc) може спокойно да се ползват функциите на компилатора - при някои компилатори са яко оптимизирани
и само не разбрах за какво ти е VirtualLock - освен нещо за дебъгване не виждам за кво друго ще ти свърши работа - едва ли ще искаш да вършиш на ОС-а работата по swap-енето :)
Re: Pisane za X-Box
"... Absolutno siguren sym 4e pisaneto stawa na DX8(za rendera) ..."
"..#pragma - ta za koito pisete towa da ne e ot naowiqt Cg (C for graphics.."
#pragma v shader-i za GF3 da si 4uval pod DX8?
shtoto az ne sym.
a ti pishesh li za XBOX vyobshte?
shtoto az pisha
"..#pragma - ta za koito pisete towa da ne e ot naowiqt Cg (C for graphics.."
#pragma v shader-i za GF3 da si 4uval pod DX8?
shtoto az ne sym.
a ti pishesh li za XBOX vyobshte?
shtoto az pisha
Re: Pisane za X-Box
ne bi trjabwalo Incubator programata da ima takiva ogranichenia - Microsoft tursi mladi ili neotrkriti talanti ili malki firmi (mnogo ot tjah wse oshte independent).
Ako imash dobur design, spec na igrata, i tech-demo predstawjashto purwoto nivo ili gore dolu neshtata - sigurno njama da imash problem.
tirulirutatuutuu
Ako imash dobur design, spec na igrata, i tech-demo predstawjashto purwoto nivo ili gore dolu neshtata - sigurno njama da imash problem.
tirulirutatuutuu
Re: Memory Menager
znachi purwo za nas VirtualLock ne sushstestwuwa - pisaneto na konsolni igri - e kato pisaneto za mashina bez nikakva virtualna pamet (ima takava wuw XBOX-a - no ne sum najasno s polzwaneto i - pri tova pishem oshte i za dve drugi platformi).
Kakvo trjabwa da ima edin memory manager:
Allokirane na pamet sus zadawane na alignment (do 256 baita naprimer) - chesto razni DMA transferi, ili drugi takiva iziskwat pametta da e alignnata do njakakuw razmer - dobre e MM-to wutreshno da poddurzha tova.
Drugo - MM trjabwa da ima wuzmozhnost da mu kazwash otkude da alokira pametta - otgore ili otdolu. Naprimer w nashata igra - w gornata chast na pametta alokirame neshta koito shte sa s po-dulug zhivot - naprimer modelite, texturite, ili danni - w dolnata chast na pametta - alokirame "temporary" danni - naprimer - blockove za spriteovete, razni obekti ot menutata, eventi, messagi, particles i t.nt.k. - t.e. neshta koito shto gode mogat da budat alokirani i osvobodeni dosta chesto po vreme na igra. Po tozi nachin se opitwame da sprem fragmentiraneto.
Sus sobstwen MM mozhe da pravim dobri analizi - koj modul kolko pamet zaema - i dali ja razpokuswa. Naprimer wseki ot ekipa ima na razpolozhenie dadena pamet (az za audioto sum ogranichen do 512K za wsichki platformi, Animatziite wzimat naj-mnogo - frontenda - kum 1-2MB.
Sus MM-to na C-to ne si winagi siguren - w prednata firma kojato rabotih pisahme za Playstation1 - tam imashe funkcii malloc1(), malloc2(), malloc3() - purwoto mi wpechatlenie beshe che tova sa prosto za tri different heap-a funkcii.. Kakvo se okaza - okaza se che malloc1() e bila purwata malloc() funckia - no e imala greshki - nachina po kojto alokira - sledowatelno Sony sa napisali malloc2() (no sa zapazili malloc1() - zashtoto e imalo weche napisano proekti raboteshti sus neja - i ne sa iskali da gi precakwat). Malloc2 sushto se e okazala bokluk, sushtoto i Malloc3 - tova me dovede da si napisha moj maluk memory manager (kojto sega kato go proverjawah naskoro se okaza che e dosta baven ako iskash da imash nad 2000-3000 elementi - no pri nas ne se nalagashe tolkova). Eto pogledni go tuka:
[линк]
eto i code ('[' i ']') mozhe da sa razwaleni
specialno tozi MM go napisah bez poddruzhka za alignment - no pazeshe mnogo malko informatzia - samo 4 baita per block - inache wuobshte ne e efektiwen - maluk e na kod - okolo 300-400 baita se kompilira pod Risc3000 (Playstation1). Imam i oshte edna optimizirana versia - no ostana w prednata firma - tazi tuka e ot arhiva na flipcode.com
tirulirutatuutuu
Kakvo trjabwa da ima edin memory manager:
Allokirane na pamet sus zadawane na alignment (do 256 baita naprimer) - chesto razni DMA transferi, ili drugi takiva iziskwat pametta da e alignnata do njakakuw razmer - dobre e MM-to wutreshno da poddurzha tova.
Drugo - MM trjabwa da ima wuzmozhnost da mu kazwash otkude da alokira pametta - otgore ili otdolu. Naprimer w nashata igra - w gornata chast na pametta alokirame neshta koito shte sa s po-dulug zhivot - naprimer modelite, texturite, ili danni - w dolnata chast na pametta - alokirame "temporary" danni - naprimer - blockove za spriteovete, razni obekti ot menutata, eventi, messagi, particles i t.nt.k. - t.e. neshta koito shto gode mogat da budat alokirani i osvobodeni dosta chesto po vreme na igra. Po tozi nachin se opitwame da sprem fragmentiraneto.
Sus sobstwen MM mozhe da pravim dobri analizi - koj modul kolko pamet zaema - i dali ja razpokuswa. Naprimer wseki ot ekipa ima na razpolozhenie dadena pamet (az za audioto sum ogranichen do 512K za wsichki platformi, Animatziite wzimat naj-mnogo - frontenda - kum 1-2MB.
Sus MM-to na C-to ne si winagi siguren - w prednata firma kojato rabotih pisahme za Playstation1 - tam imashe funkcii malloc1(), malloc2(), malloc3() - purwoto mi wpechatlenie beshe che tova sa prosto za tri different heap-a funkcii.. Kakvo se okaza - okaza se che malloc1() e bila purwata malloc() funckia - no e imala greshki - nachina po kojto alokira - sledowatelno Sony sa napisali malloc2() (no sa zapazili malloc1() - zashtoto e imalo weche napisano proekti raboteshti sus neja - i ne sa iskali da gi precakwat). Malloc2 sushto se e okazala bokluk, sushtoto i Malloc3 - tova me dovede da si napisha moj maluk memory manager (kojto sega kato go proverjawah naskoro se okaza che e dosta baven ako iskash da imash nad 2000-3000 elementi - no pri nas ne se nalagashe tolkova). Eto pogledni go tuka:
[линк]
eto i code ('[' i ']') mozhe da sa razwaleni
#define USED 1
typedef struct {
unsigned size;
} UNIT;
typedef struct {
UNIT* free;
UNIT* heap;
} MSYS;
static MSYS msys;
static UNIT* compact( UNIT *p, unsigned nsize )
{
unsigned bsize, psize;
UNIT *best;
best = p;
bsize = 0;
while( psize = p->size, psize )
{
if( psize & USED )
{
if( bsize != 0 )
{
best->size = bsize;
if( bsize >= nsize )
{
return best;
}
}
bsize = 0;
best = p = (UNIT *)( (unsigned)p + (psize & ~USED) );
}
else
{
bsize += psize;
p = (UNIT *)( (unsigned)p + psize );
}
}
if( bsize != 0 )
{
best->size = bsize;
if( bsize >= nsize )
{
return best;
}
}
return 0;
}
void MSYS_Free( void *ptr )
{
if( ptr )
{
UNIT *p;
p = (UNIT *)( (unsigned)ptr - sizeof(UNIT) );
p->size &= ~USED;
}
}
void *MSYS_Alloc( unsigned size )
{
unsigned fsize;
UNIT *p;
if( size == 0 ) return 0;
size += 3 + sizeof(UNIT);
size >>= 2;
size <<= 2;
if( msys.free == 0 || size > msys.free->size )
{
msys.free = compact( msys.heap, size );
if( msys.free == 0 ) return 0;
}
p = msys.free;
fsize = msys.free->size;
if( fsize >= size + sizeof(UNIT) )
{
msys.free = (UNIT *)( (unsigned)p + size );
msys.free->size = fsize - size;
}
else
{
msys.free = 0;
size = fsize;
}
p->size = size | USED;
return (void *)( (unsigned)p + sizeof(UNIT) );
}
void MSYS_Init( void *heap, unsigned len )
{
len += 3;
len >>= 2;
len <<= 2;
msys.free = msys.heap = (UNIT *) heap;
msys.free->size = msys.heap->size = len - sizeof(UNIT);
*(unsigned *)((char *)heap + len - 4) = 0;
}
void MSYS_Compact( void )
{
msys.free = compact( msys.heap, 0x7FFFFFFF );
}
specialno tozi MM go napisah bez poddruzhka za alignment - no pazeshe mnogo malko informatzia - samo 4 baita per block - inache wuobshte ne e efektiwen - maluk e na kod - okolo 300-400 baita se kompilira pod Risc3000 (Playstation1). Imam i oshte edna optimizirana versia - no ostana w prednata firma - tazi tuka e ot arhiva na flipcode.com
tirulirutatuutuu
Do X (VS.NET) wupros
Polzwate li tam wuw vashata firma VS.NET za XBOX, kak se durzhi?
tirulirutatuutuu
tirulirutatuutuu
Re: Pisane za X-Box
bah - losho nema - az za toolovete si weche pochnah da go polzwam - ama za igra - osobeno konsolna - baaah... mani taja rabota. Ako ima edno dobro samo na chisto C da pishem - naj-she sum dobre... ama na... (samo toolevete na C++ sus STL)
tirulirutatuutuu
tirulirutatuutuu
Re: Pisane za X-Box
Ne daze ne sym go i wizdal naziwo. No s DX 8 rabotq oste ot kakto izlezna i to ne s FFP a s efekti i shaderi. Sega iskam da se izwinq ako sum bil neqsen no #pragmite sa 4ast ot ezika Cg koito be predstawen na saita na nVidia otpredi mesec. Mislq 4e ste e i 4ast ot DX9.
Re: За Mist и/или malkia
По ММ имам няколко предложения които спокойно могат да се разглеждат и като въпроси.Наистина , че раздробяването на паметта е голям проблем , но защо се получава раздробяване?Причината се корени в указателите и в нищо друго!Защото веднъж даден от ММ неможе да бъде променян.А ако ММ дава не указател а индекс(_uiMemoryID), може на заден фон да се правят местения на памет и то абсолютно прозрачно за проложението.Когато следва да се използва памет по даден _uiMemoryID се вика функция PVOID GetPtrByID(UINT uiMemoryID);.Сега се връща коректен указател.След време гореполучения указател ще се окаже ненужен и се вика функция BOOL FreePtrByID(UINT uiMemoryID);.Сега ММ може да дефрагментира кода наволя.
А сега нещо относно вашите ММ.Знае се,че всеки блок отпусната и свободна памет нябва да бъде описан.Си ММ поставя такова описание пред всеки блок.Как е привас.Да ли ще е по-добре ако описанията се изместят другаде?
Ако описанията се изместят другаде ще може да се дава и памен различна от пиши/чети/изпълни!
typedef struct _INDEXDESCRIPTOR INDEXDESCRIPTOR,*PINDEXDESCRIPTOR;
struct _INDEXDESCRIPTOR
{
PVOID pvMemBlock;
UINT uiMemSize;
PINDEXDESCRIPTOR pPrevBlock,pNextBlock;
};
Сега се запазва достатъчно памет около 1GB.От единия край(долния) се взима памет за таблицата с интексите,а от горния се заделя памет за приложението.
Как намирате идеята?
А сега нещо относно вашите ММ.Знае се,че всеки блок отпусната и свободна памет нябва да бъде описан.Си ММ поставя такова описание пред всеки блок.Как е привас.Да ли ще е по-добре ако описанията се изместят другаде?
Ако описанията се изместят другаде ще може да се дава и памен различна от пиши/чети/изпълни!
typedef struct _INDEXDESCRIPTOR INDEXDESCRIPTOR,*PINDEXDESCRIPTOR;
struct _INDEXDESCRIPTOR
{
PVOID pvMemBlock;
UINT uiMemSize;
PINDEXDESCRIPTOR pPrevBlock,pNextBlock;
};
Сега се запазва достатъчно памет около 1GB.От единия край(долния) се взима памет за таблицата с интексите,а от горния се заделя памет за приложението.
Как намирате идеята?
Re: За Mist и/или malkia
това със ID-тата може и да ти помогне да минимизираш по някакъв начин дефрагментацията обаче ще ти направи кода много тромав - всеки пък когато искаш да използваш алокирана памет трябва първо да и поискаш ID-то - на мен туй ми звучи ужасно, а ако си multithreaded ми звучи още по страшно ;).
при мен памет се заема само на големи парчета - зявките към OS-a са поне от 64к - по-малките заявки се заемат от pool-ове (има pool-ове за определени размери - при мен около 50, но това се променя след като поразгледа човек статистиките :) - и всяка заявка се взима от pool-а за който заявеният размер е <= от размера на парчетата в него) а по-големите директно от OS-a
описват се само pool-овете и парчетата алокирани директно, парчетата свободна памет в един pool се държат в списък (без никаква излишна служебна памет - адреса на следващото парче е ВЪТРЕ в самото парче), парчетата заета памет не се описват никъде - когато дойде време да се освободят по самата стоиност на указателя се определя pool-а от който е заета и се добавя в списъка на свободните парчета за този pool
между другото основните идеи са заимствани от ММ-то на Unreal
при мен памет се заема само на големи парчета - зявките към OS-a са поне от 64к - по-малките заявки се заемат от pool-ове (има pool-ове за определени размери - при мен около 50, но това се променя след като поразгледа човек статистиките :) - и всяка заявка се взима от pool-а за който заявеният размер е <= от размера на парчетата в него) а по-големите директно от OS-a
описват се само pool-овете и парчетата алокирани директно, парчетата свободна памет в един pool се държат в списък (без никаква излишна служебна памет - адреса на следващото парче е ВЪТРЕ в самото парче), парчетата заета памет не се описват никъде - когато дойде време да се освободят по самата стоиност на указателя се определя pool-а от който е заета и се добавя в списъка на свободните парчета за този pool
между другото основните идеи са заимствани от ММ-то на Unreal
Re: За Mist и/или malkia
suglasen sum sus Mist - pri konsolnite app - chesto ima po njakolko threada wurwjashti + njakolko transfera po DMA - sushto i tromawostta na koda - po-skoro trjabwa dobre da se planira kak da alokira prilozhenieto ili igrata - nishto poveche :)
Edin variant e naprimer kato wuw Pascal-a (Borland Pascala) - da se markiram pametta - i sled tova s edin hod da se osvobodi pametta zaeta sled tozi marker - naprimer do glavnoto menu i frontenda - wsichkata pamet zaeta e nuzhna prez cjaloto izpulnenie na igrata - wleze li se weche ot glavnoto menu w dadena igra - predi tova pametta se markira - i kato izleze - se osvobozhdawa - no ne vinagi mozhe da se razchita na takiva raboti (osobeno ako njakoi kolegi - postojanno twurdjat che singleton-a e hubavo neshto - az ne go namiram za takova ;) )
tirulirutatuutuu
Edin variant e naprimer kato wuw Pascal-a (Borland Pascala) - da se markiram pametta - i sled tova s edin hod da se osvobodi pametta zaeta sled tozi marker - naprimer do glavnoto menu i frontenda - wsichkata pamet zaeta e nuzhna prez cjaloto izpulnenie na igrata - wleze li se weche ot glavnoto menu w dadena igra - predi tova pametta se markira - i kato izleze - se osvobozhdawa - no ne vinagi mozhe da se razchita na takiva raboti (osobeno ako njakoi kolegi - postojanno twurdjat che singleton-a e hubavo neshto - az ne go namiram za takova ;) )
tirulirutatuutuu
Re: За Mist и/или malkia
Da - tva e verno typo sys markiraneto za takiva celi - tova ozna4ava da ne sa pipat pove4e strukturite (anagrafski) zaeli pamet predi markirovkata - stati4na rabota - moje i da vyrvi v nqkoi slu4ai no si e lamersko - mnogo skovano - trqbva si po-dobra organizaciq za takyv tip MM.
Re: За Mist и/или malkia
Neznam zashto smjatash che e lamersko - no ima dosta strukturi koito edin put initializirani (alokirani) si stojat taka prez cjaloto wreme dokato igrata raboti.
Markiraneto naistina e malko riskovano - no spasjava polozhenieto (za w momenta nie ne izpolzwame markirane - no w prednata firma da). Kakvo shte reche "anagrafski"?
I kato kazhesh samo trjabwa si po-dobra organizacia za takuv tip MM - e bezpredmetno - dai idea, primer - kakva organizatzia trjabwa (ne za dynamichno prilozhenie ili server - a za consolna igra).
tirulirutatuutuu
Markiraneto naistina e malko riskovano - no spasjava polozhenieto (za w momenta nie ne izpolzwame markirane - no w prednata firma da). Kakvo shte reche "anagrafski"?
I kato kazhesh samo trjabwa si po-dobra organizacia za takuv tip MM - e bezpredmetno - dai idea, primer - kakva organizatzia trjabwa (ne za dynamichno prilozhenie ili server - a za consolna igra).
tirulirutatuutuu