If I declare an array `double x[n]` where n is either a constant or an int variable, I can get it's size during runtime. But if I allocate memory using `malloc` this does not happen. Is this because of stack vs heap memory allocation ? If so how are array sizes for global variables determined and why can't I declare variable length arrays as global variables ? and how does deallocation work since you need to know how much memory to free ?