Results 1 to 16 of 16
Thread: malloc() âðúùà NULL?
Hybrid View
-
8th June 2010 14:06 #1
malloc() âðúùà NULL?
Çäðàâåéòå,
òåñòâàõ òóê åäíà ìîÿ ïðîãðàìà ïîä Windows XP x64 - ïîíåæå ñå ñëó÷âàøå äà ãúðìè.
Êàòî äåáúãíàõ, ñå îêàçà, ÷å malloc() îò âðåìå íà âðåìå âðúùà NULL.
Ïàìåòòà, êîÿòî ñå îïèòâàì äà çàäåëÿ, å îêîëî 120 ìåãàáàéòà (öÿëî ïàð÷å).
ßâíî íå å ïðîáëåìúò â òîâà, ÷å ïàìåòòà íà êîìïþòúðà íå ñòèãà (òîé å ñ 8 ãèãàáàéòà), à âúâ ôðàãìåíòèðàíåòî íà ïàìåòòà. Ñòàâàò ìíîãî àëîêàöèè è äåàëîêàöèè (8 òðåäà íàâåäíúæ) è ÿâíî ïî íÿêîå âðåìå ñå îêàçâà, ÷å íÿìà ïîñëåäîâàòåëíè 120 ìåãàáàéòà.
Ïðîâåðèõ çà èçòè÷àíå íà ïàìåò - íÿìà.
Ïîäîçèðàì íàé-âå÷å windows-à - ñúùàòà ïðîãðàìà ñúì ÿ òåñòâàë ïîä 32-áèòîâ Windows è íÿìàøå ïðîáëåìè, òåñòâàë ñúì ÿ õèëÿäè ïúòè è ïîä Linux (äàæå íà ìàøèíè ñ 1 ãèãàáàéò ïàìåò) - òàì ñúùî ðàáîòè áåç ãðåøêà.
Òà, âúïðîñ êúì Win32 ãóðóòàòà - èìà ëè íÿêàêúâ runtime tuning íà òîâà êàê äà ñå äúðæè malloc, èëè íåùî, êîåòî ìîãà äà íàïðàâÿ çà äà èçáåãíà òàçè ãðåøêà? Îñâåí î÷åâèäíîòî ïðåíàïèñâàíå íà êîäà äà ïðàâè ïî-äðåáíè àëîêàöèè (êîåòî, åñòåñòâåíî, å âúçìîæíîñò, íî èñêàì äà ãî èçáåãíà). Ïîçäðàâè!Åòî òàêà ñå ïëîäÿò òå, êàçâàì ñè àç. Ïîä íîñà òè.
"640K îught to be enough for anybody" - Bill Gates, 1981
Òåñòîâå íà áàòåðèè::Machine specs::Fract::AGG::ÍåÑåÑúðäè×îâå÷å::Baileys::blog::YouTube channel
-
8th June 2010 14:58 #2
Ïðåäïîëàãàì, ÷å òè òðÿáâà òîâà:
http://msdn.microsoft.com/en-us/libr...=VS.85%29.aspx
è òîâà:
http://msdn.microsoft.com/en-us/libr...=VS.85%29.aspx
Ïîíåæå ìèñëÿ, ÷å malloc() ðàáîòè ñ äåôîëòíèÿ heap íà ïðîöåñà, ìîæå äà ãî âçåìåø ñ GetProcessHeap è ñëåä òîâà ñ HeapSetInformation() äà ãî íàïðàâèø LFH.Gigabyte X570 Aorus Elite, AMD Ryzen 7 5800X@PBO+200, Noctua NH-D15, 2x16GB G.Skill F4-3600C17D-32GTZR, Palit GeForce RTX 4070 Ti GameRock Classic, 2x Sandisk Extreme II 240GB (not in RAID)+WD 320GB AAKS + WD40EZRZ + Toshiba X300 6GB, Cooler Master HAF 922, CORSAIR 750W CX
-
8th June 2010 15:13 #3Registered User
Join Date: Oct:2003
Location: Ñîôèÿ
Posts: 4,317
Âèæ äàëè îáÿñíåíèÿòà òóê íå òè ïîìàãàò: http://blogs.msdn.com/b/oldnewthing/.../10004218.aspx
-
8th June 2010 16:13 #4
Õìì, @mitkohr, áëàãîäàðÿ çà èíôîòî, íî ìàé íÿìà äà ìè ïîìîãíå â ìîÿ ñëó÷àé:
Originally Posted by Low-fragmentation Heap
Åòî òàêà ñå ïëîäÿò òå, êàçâàì ñè àç. Ïîä íîñà òè.
"640K îught to be enough for anybody" - Bill Gates, 1981
Òåñòîâå íà áàòåðèè::Machine specs::Fract::AGG::ÍåÑåÑúðäè×îâå÷å::Baileys::blog::YouTube channel
-
8th June 2010 16:48 #5
Çà òàêèâà ãîëåìè ÷úíêîâå íèêàêúâ õèéï íå âúðøè ðàáîòà. Ñàìî ñ VirtualAlloc. Äàæå ñè ÿ çàïàçè(èëè àêî ñà ïîâå÷å ðåãèîíèòå) ïðåäè äà ñà ïî÷íàëè ôðàãìåíòàöèèòå è àëîêàöèè, à ïîñëå ñè ÿ êîìèò-íè, êîãàòî å íóæíà.
Ìîæå äà îïèòàø äà ñè êîìïàêíåø õèéïà. Òîâà åäíî. Äðóãî å äà ðàáîòèø ñ îòäåëåí õèéï.(HeapCompact, HeapCreate).
Çà ñúæàëåíèå íå çíàì êàê äà íàêàðàø malloc äà òè ñëóæè îáà÷å.EVGA X299 FTW K|i9-7960X@4.7|4x8 Patriot Viper Steel 4000|GTX 1660 Ti|970 EVO 1 TB|Seasonic Focus GX-1000|Xigmatek Elysium|Êèëî è ïîëîâèíà âîäà
Rampage IV Extreme BE|E5-1680v2@4.7|4x4 HyperX 1866|Cougar Aqua 240|GTX 1050 Ti|970 EVO 1/4 TB|CM 850 SilentPro|HAF-X|Áåç èñòèíñêî âîäíî
-
8th June 2010 17:37 #6
Áîìáåðà ïðàâèëíî å êàçàë. Íàé-äîáðå â íà÷àëîòî ñè çàïàçè 1,2ÃÁ îò ïàìåòòà. È ñè íàïðàâè memory pool è êàòî òè òðÿáâà ïðîâåðÿâàø èìà ëè ìÿñòî è òîãàâà ïîëçâàø îò íåãî. Òàêà èëè â íà÷àëîòî ùå òè ãðúìíè èëè ùå ðàáîòè íîðìàëíî ïî âðåìå íà èçïúëíåíèåòî. Çíàì, ÷å òàêà íå å íàé-åôåêòèâíî, íî ìè èçãëåæäà, ÷å ïðîãðàìàòà å âàæíà - ïîäîáíî íà M$ SQL server, êîéòî âåäíúæ çàäåëèë ïàìåò ïîâå÷å íå ÿ âðúùà.
Have no fear ike iz here.
CPU Cx486DLC@40MHz, RAM 4MB, VGA Trident 512KB, HDD Conner 160MB, Monitor 14" Color
-
8th June 2010 18:21 #7
Èìà îùå åäèí íà÷èí äà ñå îñèãóðÿò ïîñëåäîâàòåëíè âèðòóàëíè àäðåñè, ñ file mapping, êîéòî ñå ðàçïîëàãà â ïåéäæèíã ôàéëà. Çâó÷è êàòî ñàìîóáèéñòâî îòêúì ñêîðîñò, íî íå å òàêà - ðåàëíè äèñêîâè îïåðàöèè ùå èìà ñàìî àêî íå äîñòèãà ôèçè÷åñêàòà ïàìåò â ñèñòåìàòà - ò.å êîãàòî è ïàìåò çàäåëåíà ïî âñÿêàêúâ íà÷èí ùå ñå ñóàïâà. Ïðåäèìñòâîòî å, ÷å ôàéëîâèòå ìàïèíãè ñå ðàçïîëàãàò ìåæäó 2-ðè è 3-òè ãèãàáàéò âúâ âèðòóàëíèòå àäðåñè, êúäåòî îáèêíîâåíî íå ñå ïðàâÿò àëîêàöèè îò íèùî, îñâåí îò ÎÑ-à. Äðóãîòî ïðåäèìñòâî å, ÷å ñ ôàéë ìàïèíãà ñå ðàáîòè êàòî ñ âñåêè äðóã óêàçàòåë. Òóê òÿáâà äà ñå ïðåäâèäè, ÷å îáèêíîâåíèòå ìàêðîñè è ôóíêöèè çà ÷åêâàíå íà âàëèäíîñòòà íà óêàçàòåëè ìîæå è äà ãúðìÿò áåç âñúùíîñò óêàçàòåëèòå äà ñà íåâàëèäíè, ïðîñòî ñà â "óæ" íåâàëèäåí ìåìîðè ðåéíäæ, à òî íå å òàêà.
EVGA X299 FTW K|i9-7960X@4.7|4x8 Patriot Viper Steel 4000|GTX 1660 Ti|970 EVO 1 TB|Seasonic Focus GX-1000|Xigmatek Elysium|Êèëî è ïîëîâèíà âîäà
Rampage IV Extreme BE|E5-1680v2@4.7|4x4 HyperX 1866|Cougar Aqua 240|GTX 1050 Ti|970 EVO 1/4 TB|CM 850 SilentPro|HAF-X|Áåç èñòèíñêî âîäíî
-
8th June 2010 23:31 #8
Íå å õóáàâî äà ïðàâèø ìíîãî àëîêåéòè àêî ðàáîòèø ñ òðåäîâå. Ïàìåòòà ñå ôðàãìåòèðà è ñòàâà áîçà. Õóáàâî å äà ñè íàïðàâèø ñòàòè÷íè áóôåðè êàêòî ñà òè ïðåäëîæèëè è äðóãèòå è ñàì äà ñè ñëåäèø êàêâî ïðàâèø ñ òÿõ. Êîäà ñòàâà ìàëêî ïî-ãðîçíè÷úê, íî ïúê íÿìàø ïðîáëåìè ñ ïàìåòòà.
Áÿõ ïðàâèë ïðåäè âðåìå åäèí êëàñ çà ÷åòåíå ñúñ ñîêåòè. Ñ äèíàìè÷íè áóôåðè è àëîêèðàíå ìíîãî ôðàãìåíòàöèÿ ìíîãî ïðîáëåìè. Êàòî ãè çàìåíèõ ñúñ áóôåð êîéòî ñàìî ðàçøèðÿâàì íà ñòúïêè ðàáîòàòà ñå óñïîêîè.
Ïðè âñêè÷êè ñëó÷àè àêî ñå ðàáîòè ìíîãî àêòèâíî ñ ïàìåòòà ñè çàäåëè ãîëÿìî ïàð÷å ïðåäâàðèòåëíî, äàæå ìîæåø äà ñè çàïàçèø óêàçàòåëèòå â ìàñèâ çà ïî-ëåñíî.
Äîñòúïà äî ïàð÷åòî ìîæåø ëåñíî äà ãî ñèíõðîíèçèðàø - ìóòåêñè, èâåíòè, êðèòè÷íè ñåêöèè, ñåìàôîðè àáå íà÷èíè áîë.
-
9th June 2010 00:08 #9
Àáå àç äà íàïèøà êàêâî èçêîâàõ â êðàéíà ñìåòêà. Ñïðàâèõ ñå ñ ïðîáëåìà, íî ðåøåíèåòî íå å áëåñòÿùî âúîáùå.
Ìèñëèõ çà pool-îâå è ïðåäâàðèòåëíî çàäåëÿíå... ïðîáëåìúò å, ÷å íå çíàÿ êîëêî ïàìåò ùå ìè òðÿáâà, à è ïàð÷åòàòà íå ñà çàäúëæèòåëíî åäíàêâè. Îáðàáîòâàò ñå åäíè îêîëî 8 ìåãàïèêñåëîâè ñíèìêè, âúâ float ôîðìàò, àìà ìîæå äà ñà âñÿêàêâè ðàçìåðè, íÿìà ãàðàíöèÿ, ÷å alloc size-à ùå å ïîñòîÿíåí...
Òðúãíàõ äà ñè íàïðàâÿ private heap, ÷å ìè èçãëåæäàøå ïëîäîâèòà èäåÿòà (ñ HeapCreate et al.), êîéòî äà ïîëçâàì ñàìî çà ãîëåìèòå àëîêàöèè. Îáà÷å ñå îêàçà ïî-çëå (êàòî áðîéêà îòêàçàíè malloc-è). Ãëåäàõ ãî ìíîãî âíèìàòåëíî äà íå ñúì ãî áúãíàë íåéäå - åìè íå, ïðîñòî òàêà ñå äúðæåøå. Êàòî å åäèí õèéïà ÿâíî ïîíå ñå îïðàâÿ ïî-äîáðå ìàøèíàòà. Òîâà, êîåòî òðúãíà íàêðàÿ, áåøå ñëåäíîòî:
1. Ïðîáâàì äà àëîêèðàì
2. Àêî íå ñòàíå, ïðèñïèâàì òðåäà çà 100 ìèëèñåêóíäè è ïðîáâàì ïàê
3. Àêî ïàê íå ñòàíå, ïðèñïèâàì ãî çà 200 ìèëèñåêóíäè è ïðîáâàì ïàê
...
è òàêà íàòàòúê, ñ åêñïîíåíöèàëíî óâåëè÷åíèå íà "ñïàíåòî". Îêàçà ñå, ÷å ðàáîòè, íà 1000 àëîêàöèè êúì 30 ñå ïðîâàëÿò (ò.å. ñå âëèçà â while öèêúëà), îò êîèòî ïîâå÷åòî ñå ñïðàâÿò ñëåä 100-200 ms, íàé-ãîëÿìîòî ÷àêàíå ìèñëÿ áåøå 400ms.
Òà, ñèòóàöèÿòà å ïîä êîíòðîë, íî âñå ïàê àêî íÿêîé èçìèñëè íåùî ïî-÷èòàâî, õè÷ íÿìà äà ìó ñå ñúðäÿ
Åòî òàêà ñå ïëîäÿò òå, êàçâàì ñè àç. Ïîä íîñà òè.
"640K îught to be enough for anybody" - Bill Gates, 1981
Òåñòîâå íà áàòåðèè::Machine specs::Fract::AGG::ÍåÑåÑúðäè×îâå÷å::Baileys::blog::YouTube channel
-
9th June 2010 00:35 #10
-
9th June 2010 01:24 #11
Òè ñè ðåçåðâèðàé ãîëÿì ìåìîðè ðåéíäæ, ïúê ùå êîìèòâàø, ñúùèíñêàòà àëîêàöèÿ, ñàìî àêî èìà íóæäà. Ïîñëå äåêîìèòâàø, íî ðåçåðâàöèÿòà ñè îñòàâà. Àêî èñêàø è ïîëîâèí ãèãàáàéò ñè ðåçåðâèðàé.
Ïðîáâàé äà ñè êîìïàêòíåø äèôîëòíèÿ õèéï ïðåäè òåçè ìàãèè ñ òðåäîâåòå.
Ïîâåäåíèåòî íà äèôîëòíèÿ õèéï å ïî-äîáðî, çàùîòî òîé ïî ïîäðàçáèðàíå å low fragmentation. Çà äà íàïðàâèø è òâîÿ òàêúâ - HeapSetInformation().
Íî õèéïîâåòå íå ñà ïî-áúðçè ïî íèêàêúâ íà÷èí îò VirtualAlloc, çàùîòî ïóóëúò èì ñå çàäåëÿ èìåííî ñ òàçè ôóíêöèÿ.EVGA X299 FTW K|i9-7960X@4.7|4x8 Patriot Viper Steel 4000|GTX 1660 Ti|970 EVO 1 TB|Seasonic Focus GX-1000|Xigmatek Elysium|Êèëî è ïîëîâèíà âîäà
Rampage IV Extreme BE|E5-1680v2@4.7|4x4 HyperX 1866|Cougar Aqua 240|GTX 1050 Ti|970 EVO 1/4 TB|CM 850 SilentPro|HAF-X|Áåç èñòèíñêî âîäíî
-
9th June 2010 15:45 #12
Òè ñè çàäåëè åäíî ãîëÿìî ïàð÷å ïðåäè äà ïóñíåø òðåäîâåòå. Ïîñëå ñè ïóñíè óêàçàòåë êúì íåãî â òðåäîâåòå è ñè ïîëçâàé ïàìåòòà, ñàìî ÷å íå çàáðàâÿé äà ñèíõðîíèçèðàø êàêòî òðÿáâà, çà äà íå çàïî÷íàò ðàçëè÷íè íèøêè äà ïèøàò íà åäíî è ñúùî ìÿñòî è äà ñòàíå áîçà ñ äàííèòå.
Ìîæåø è äà ñè íàïðàâèø ñîáñòâåí ïóóë. Ïðàâèø ñè åäèí êëàñ, êîéòî å singleton è â íåãî ïàçèø ìàñèâ ñ óêàçàòåëè ïúì çàäåëåíè ïàð÷åòà ïàìåò. Íÿêîé òðåä êàòî ìó òðÿáâà ïàìåò âèêà ìåòîä íà òîçè êëàñ. Àêî èìà çàäåëåíî êîåòî íå ñå èçïîëçâà îò íèêîé ïàñâàø ìó óêàçàòåë è ìó êàçâàø ÷å ñå èçïîëçâà îò íåãî. Êàòî ñè ïðèêëþ÷è ñè ãî âðúùà â ïóóë-à. Àêî íÿìà ñâîáîäíî ïàð÷å êëàñà ñàì ñúçäàâà è ïàê äàâà óêàçàòåë. Ìîæå äà ñëîæèø âúòðå â êëàñà åäèí òðåä, êîéòî äà äåàëîêèðà ïàð÷åòà ïàìåò àêî íå ñå ïîëçâàò îïðåäåëåíî âðåìå. Íà öÿëîòî òîâà íåùî ñëàãàø åäèí ñåìàôîð ñ êîéòî ìîæåø äà îãðàíè÷èø áðîÿ íà êîíêóðåíòíèòå çàÿâêè êúì ïóóëà.
Òàêà õåì ùå ñè ïî-åôåêòèâåí îòêúì ïàìåò, õåì è êîäà òè ùå ñòàíå ïî-ïðåãëåäåí.
-
9th June 2010 15:50 #13
Ïðîáëåìúò ìó å, ÷å íÿìà äîñòàòú÷íî ãîëÿìî ïàð÷å contiguous memory.
Âúîáùå òèÿ îáåêòè è ðúíòàéìîâå îñâåí äà îáîçâàò íåùàòà äðóãî íå ïðàâÿò
EVGA X299 FTW K|i9-7960X@4.7|4x8 Patriot Viper Steel 4000|GTX 1660 Ti|970 EVO 1 TB|Seasonic Focus GX-1000|Xigmatek Elysium|Êèëî è ïîëîâèíà âîäà
Rampage IV Extreme BE|E5-1680v2@4.7|4x4 HyperX 1866|Cougar Aqua 240|GTX 1050 Ti|970 EVO 1/4 TB|CM 850 SilentPro|HAF-X|Áåç èñòèíñêî âîäíî
-
9th June 2010 16:02 #14
Àç çàòîâà ñå çàìèñëèõ çà íåùî êàòî ïóóë çà äà ñå íàìàëÿò áðîÿ íà allocate è deallocate è îò òàì äà ñå íàìàëè äî íÿêúäå ôðàãìåíòèðàíåòî. Äðóã å âúïðîñà îáà÷å òîçè ïóóë êàêâà ùå ìó å ëîãèêàòà çà äà âðúùà ïàð÷å ñ ïîäõîäÿùèÿ ðàçìåð àêî èìà âå÷å çàäåëåíî òàêîâà.
Ïîñëåäíî êàòî ðàáîòèõ ñ íèøêè ìè ñå íàëîæè äà ïóñíà 150 áðîéêè, êîèòî äà ðàáîòÿò ñ MySQL. Àêî âñÿêà íèøêà èìàøå êîíåêöèÿ ñúðâúðà óìèðàøå. Êîãàòî ïóóëíàõ êîíåêöèèòå ïî òîçè íà÷èí 150 íèøêè ñè ðàáîòåõà ñïîêîéíî ñ 5-10 êîíåêöèè áåç âèäèìî íàòîâàðâàíå íà ñúðâúðà.
Ìíîãîíèøêîâèòå ïðèëîæåíèÿ âèíàãè âîäÿò äî íÿêàêâè èçâðàøåíèÿ ñ ïðèëîæåíèåòî èëè ñ ìîçúêà íà ïðîãðàìèñòà
-
9th June 2010 16:31 #15
Pool íå ñòàâà - anrieff âå÷å å ñïîìåíàë, ÷å ðàçìåðèòå íà àëîêèðàíèòå ïàð÷åòà ñà òâúðäå ðàçíîðîäíè. Îñâåí òîâà ïóóë, ðàáîòåù ñúñ 120 ìåãàáàéòîâè chunk-îâå... forget about it.
Ïðîäúëæàâàì äà ñúì íà ìíåíèå ÷å ñìÿíà íà malloc èìïëåìåíòàöèÿòà íàïðèìåð ñ TCMalloc íàé-âåðîÿòíî ùå ïîìîãíå. TCMalloc, êàêòî è íÿêîëêî äðóãè àëîêàòîðà ñà ñïåöèàëíî îïòèìèçèðàíè çà ìíîæåñòâî íèøêè è íèñêà ôðàãìåíòàöèÿ.Êîéòî ìè öúêíå ÷åðâåí ïàëåö, äà ìó îìåêíå ÷óðêàòà!
-
9th June 2010 16:35 #16
Äèôîëòíèÿ õèéï å ïîäîáåí ìåìîðè ïóë, çàòîâà ãî ïîñúâåòâàõ äà ñè íàïðàâè âòîðè ñîáñòâåí, íÿìà íóæäà îò ñïåöèàëåí êîä â ñëó÷àÿ. Ìîæå äà ìàíèïóëèðà ãîëåìèíàòà(êîìèòíàòà è ðåçåðâèðàíà) íà äèôîëòíèÿ õèéï ñ îïöèè íà ëèíêåðà - äà ãî íàïðàâè äîñòàòú÷íî ãîëÿì, çà äà èìà è ãîëåìè ïàð÷åòà ïàìåò â íåãî, êàêòî è ïåðèîäè÷íî äà ãî êîìïàêòâà(íå áèâà äà ñå ïðåêàëÿâà ñ ÷åñòîòàòà òúé êàòî å ñðàâíèòåëíî áàâíà îïåðàöèÿ). Òàì å íàé-äîáðå, çàùîòî ìÿñòîòî ìó ñå çàäåëÿ îùå ïðè ñúçäàâàíåòî íà ïðîöåñà.
EVGA X299 FTW K|i9-7960X@4.7|4x8 Patriot Viper Steel 4000|GTX 1660 Ti|970 EVO 1 TB|Seasonic Focus GX-1000|Xigmatek Elysium|Êèëî è ïîëîâèíà âîäà
Rampage IV Extreme BE|E5-1680v2@4.7|4x4 HyperX 1866|Cougar Aqua 240|GTX 1050 Ti|970 EVO 1/4 TB|CM 850 SilentPro|HAF-X|Áåç èñòèíñêî âîäíî




Reply With Quote

Lenovo ThinkPad 15 èëè IdeaPad 15
5th May 2023, 22:16 in Ìîáèëíè êîìïþòðè