рдХрдард┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рдореЗрдореЛрд░реА

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдПрдХ рд╡рд░реНрдЧ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд░рди рд╕рдордп рдкрд░ рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рд╕рдВрдЪрд╛рд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдвреЗрд░ рдХреЗ рдПрдореНрдмреЗрдбреЗрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рд╡рд┐рддрд░рдг рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЕрдиреНрдп рдПрдЬреЗрдВрдЯреЛрдВ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рднрд╛рдЧ рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреНрд▓рд╛рд╕рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмреНрд▓реЙрдХ рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, LwIP рдореЗрдВ)ред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЕрд╡рд╛рдВрдЫрдиреАрдп рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдФрд░ рдЧреБрдгрд╡рддреНрддрд╛ рд╕рдВрдмрдВрдзреА рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЕрдиреБрдЪреНрдЫреЗрдж рдореЗрдВ, рдореИрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдкрд╛рд░рдВрдкрд░рд┐рдХ (рдЧреИрд░-рдЕрд╡рд░реЛрдзрдХ) рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдзреНрдпрд╛рди рд╕реЗ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд░реВрдк рд╕реЗ рд╡рдВрдЪрд┐рдд рд╣реИрдВ, рдореИрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдореБрджреНрджреЛрдВ рдкрд░ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ рдЬреАрд╡рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реВрдВ,рдФрд░ рдореИрдВ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред



(рдХреЗрдбреАрдкреАрд╡реА - рдЕрдВрдд рдореЗрдВ рдЪрд┐рддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди рджреЗрдЦреЗрдВ)


рдЧрддрд┐рд╢реАрд▓ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЧреБрдгреЛрдВ рдХреА рдЧреИрд░-рд╕реНрдкрд╖реНрдЯрддрд╛ рдиреЗ рдХреБрдЫ RTOS рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдХреА рдереЛрдбрд╝реА рд╡рд┐рдХреГрддрд┐ рдХреА рдУрд░ рдПрдХ рдкрд░реЗрд╢рд╛рди рдкреНрд░рд╡реГрддреНрддрд┐ рдкреИрджрд╛ рдХреА рд╣реИ, рди рдХрд┐ рдЖрдЦрд┐рд░реА рд╣рд┐рдЯред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, FreeRTOS рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди рдЕрдиреБрднрд╛рдЧ рдирд┐рд░рдВрддрд░ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЬрдЯрд┐рд▓рддрд╛ рдУ (1) рдХреЗ рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╡рд░реНрдЧ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ , рдПрдХ рдЕрдиреБрднрд╡рд╣реАрди рд╕рд╣рдпреЛрдЧреА рдХреЛ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ O (n) рдПрдХ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЫрдд рд╣реИред рдЗрд╕реА рддрд░рд╣ рдХреА рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдБ рдЪрд┐рдмрд┐рдУрд╕ ( 1 , 2) рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рд╣реИрдВ). , , ; , . , .


, , , ( , ). : O(log n) , O(n), .


. , , , . , . NuttX, (best fit), . .


, , , , , .


. , , API , . , , :


//     :
struct FragmentedBuffer
{
    struct FragmentedBuffer* next;
    uint8_t data[];
};

// ... :
uint8_t* data;

, Buddy Allocator, Half-Fit, Two-Level Segregated Fit (TLSF). O(1) ( Buddy Allocator , , ). J. Herter J. Robson тАУ , тАУ тАЬTiming-Predictable Memory Allocation In Hard Real-Time SystemsтАЭ тАЬWorst case fragmentation of first fit and best fit storage allocation strategiesтАЭ, .


. . , , ( - ) . 26тАУ33 , , H, , :


H=2M(1+тМИlog2тБбnтМЙ)


M тАУ , n тАУ .


. , , . , H = M (n тАФ 2), .


, , () , . , StackOverflow, , . (500 C99/C11), , .


: https://github.com/pavel-kirienko/o1heap.


, . , , , . ; , :


  • : H [KiB] M [KiB] n [KiB] 16 .
  • : , MiB.

H , , . . H, , , . H , . , . (Embox?), .


. NuttX , , : "I considered porting TLSF at one point, but overall it's low on my list of NuttX improvements I'd explore if I actually had time". .

Source: https://habr.com/ru/post/undefined/


All Articles