Clarification on run
(Please excuse me if i got the title incorrect, I believe it is binding but if anything let me know and I will edit the title/question)
Learning about different ways to bind data in programming (No specific language) we went over 5 types. (I gave the type, with the definition given in class, under it will be my questions)
1) Static : subscript ranges are statically bound and storage allocation is static (before run-time)
2) Fixed stack-dynamic : subscript ranges are statically bound, but the allocation is done at declaration time
I want to be sure my example is correct, in c++ you can't do (tested on VS 2015) int size = 100; int data[size];
but this works
const int size = 100;
int data[size];
my guess would be that it is "fixed" due to the fact the const is seen during compile time so the program knows the size before hitting that statement, is this correct?
3) Stack-dynamic : subscript ranges are dynamically bound and the storage allocation is dynamic (done at run-time)
4) Fixed Heap-dynamic : similar to fixed stack-dynamic: storage binding is dynamic but fixed after allocation (ie, binding is done when requested and storage is allocated from heap, not stack)
if i am correct this is an example of this
int * x = new int [size];
due to the fact that, the allocated memory is on the heap, it is dynamic allocated memory, and the fixed part comes into fact that the size cannot grow, correct?
I want to think you for your time, sorry if these questions may be elementary but after asking people, and googling I get mixed answers and not sure what to believe
5) Heap-dynamic : binding of subscript ranges and storage allocation is dynamic and can change any number of times
"Before run-time" means that the memory is allocated when an instance of the program is created (when you choose to start a program, the operating system does this), but before the execution of the program starts.
Yes, you are correct that the value of a const int
is known at compile time, therefore the compiler can use it to know the size of the array at compile time. If you use a variable instead, you would have to allocate the array dynamically at run-time.
"Stack-dynamic" means that the variables are created at a function call, such as the parameters of the function. They are run-time and temporary and exist on the stack. Their size is not known at compile-time.
Your example of "fixed heap dynamic" is probably not correct, becuase I assume you're implying a variable, not a constant, to state the size of the array. "Fixed" is known at compile time, so you need to use a constant/literal. "Fixed heap dynamic" is an array of fixed size, but allocated dynamically on the heap.
"Heap-dynamic" doesn't mean that the size can change, but that the size is only known at run-time. Arrays cannot naturally change size, since you cannot guarantee that there is any more contiguous memory next to it that it can grow into. Making an array larger normally means you have to make a new, larger array, and copy the old contents into it, and delete the old, smaller array.
链接地址: http://www.djcxy.com/p/2234.html上一篇: 为什么堆中的总计操作比堆更快?
下一篇: 澄清运行