Выделение памяти в стеке

в С99 можно память в стеке выделять

nb:[/home/dimka/tmp]$ > test.c #include <stdio.h>

long long factorial(int n) { int array[n]; for (int i=0; i<n; i++) array[i]=i+1;

long long result=1;

for (int i=0; i<n; i++) result*=array[i]; return result; }

int main(int argc, char **argv) { printf("factorial %d=%lld\n" "factorial %d=%lld\n", 10, factorial(10), 15, factorial(15)); } ^D nb:[/home/dimka/tmp]$ gcc -std=c99 test.c -o test nb:[/home/dimka/tmp]$ ./test factorial 10=3628800 factorial 15=1307674368000

кто-нибудь делал тесты насчет того насколько это эффективнее/неэффективнее malloc?

Reply to
Dmitry E. Oboukhov
Loading thread data ...

Привет, Dmitry !

27 Aug 06 , 13:41 Dmitry E. Oboukhov писал к All:

DEO> long long factorial(int n) DEO> { DEO> int array[n]; [skip]

DEO> кто-нибудь делал тесты насчет того насколько это DEO> эффективнее/неэффективнее malloc?

А зачем тесты? :) если у нас стек программно-доступен, то автоматические переменные будут быстрее, но если захапать больше стека чем его физически есть, то будет плохо. маллок он хоть и медленнее в общем случае, но возвращает код возврата, который можно проверить и в случае недостатка памяти сделать что-нибудь осмысленное.

. С уважением, Hикита. icq:240059686, lj-user:nicka_startcev ... Я матернулся чтоб узнат не матэрнулас ли оно чтоб узнат не матэрнулся ли я

Reply to
Nickita A Startcev

DO>> в С99 можно память в стеке выделять DL>

DO>> long long factorial(int n) DO>> { DO>> int array[n]; DO>> for (int i=0; i<n; i++) array[i]=i+1; DL>

DO>> long long result=1; DL>

DO>> for (int i=0; i<n; i++) result*=array[i]; DO>> return result; DO>> } DL>

DL> Зачем здесь вообще память выделять по массив ? DL>

DO>> кто-нибудь делал тесты насчет того насколько это DO>> эффективнее/неэффективнее malloc? DL>

DL> Выделение памяти на стеке всегда эффективнее всяких malloc из-за принципа DL> работы хипа. DL> Только вот временем жизни объекта на стеке так просто управлять не DL> получится, да и стека часто DL> гораздо меньше, чем хипа. про время жизни оно понятно :)

просто много задач где память выделяется подо что-то потом это что-то вызывается с указателем на выделенную память, потом результат обрабатывается и память освобождается :) вот я и подумываю переползти чтоли на С99?

Reply to
Dmitry E. Oboukhov

Hello Dmitry.

05 Sep 06 10:05, you wrote to me:

DL>>

DL>> Выделение памяти на стеке всегда эффективнее всяких malloc из-за DL>> принципа работы хипа. DL>> Только вот временем жизни объекта на стеке так просто управлять DL>> не получится, да и стека часто гораздо меньше, чем хипа. DO> про время жизни оно понятно :)

DO> просто много задач где память выделяется подо что-то DO> потом это что-то вызывается с указателем на выделенную память, DO> потом результат обрабатывается и память освобождается :) DO> вот я и подумываю переползти чтоли на С99?

В любом случае надо весьма хорошо представлять себе то, что делаешь, выделение на стеке любым способом int MyArray[32768]; Может привести к весьма забавным последствиям в условиях сильно ограниченного стека, тогда как malloc просто возвратит NULL. А вообще классики говорят, что все беды - от premature optimisation :)

Dmitry

Reply to
Dmitry Lyokhin

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.