Purity of alloca()
    bearophile 
    bearophileHUGS at lycps.com
       
    Fri Jul  2 04:19:01 PDT 2010
    
    
  
Is alloca() pure?
Given the same input alloca() generally returns different pointers, so it's not a pure function.
But the same is true for the ptr field when you allocate an array on the heap.
And the memory allocated by alloca() never escapes the function, so it looks more pure than normal heap allocation :-)
import std.c.stdlib: alloca;
pure int foo(int n) {
    auto arr = new int[n];
    for (int i; i < n; i++)
        arr[i] = i;
    return arr[0];
}
pure int bar(int n) { // error: not pure because alloca is not pure
    int* arr = cast(int*)alloca(int.sizeof * n);
    for (int i; i < n; i++)
        arr[i] = i;
    return arr[0];
}
void main() {}
Bye,
bearophile
    
    
More information about the Digitalmars-d-learn
mailing list