1.这两个维度是如何存储在内存中的,它们是连续的吗?(我的意思是intM,不是动态分配,我认为intM发生在堆栈区域,所以是连续的,不是吗?)
2. malloc分配的区域是否必须是连续的?
3.如果不需要动态分配内存空间,应该在哪里使用?堆栈或堆。例如,我想要一个字符数组来存储10000个字符,那么我应该使用:
char a[10000];或
char *a = calloc(sizeof(char),10000);“函数调用栈”是否与变量栈在同一区域??在同一堆栈中还是不同?
发布于 2013-02-23 03:20:16
在int numbers[m][n]中,n是内存中连续的int,例如numbers[0][0]后面跟着numbers[0][1]。
另一方面,假设是n=10,那么numbers[m][9]后面就是numbers[m+1][0]。
malloc返回连续的内存。你决定如何使用它。
堆栈上一个10000字节的数组是没有问题的,除非函数是递归的,而且(正如Carey所说的),除非你是在一个小的堆栈环境中开发的。嵌入。
是的,callstack和局部变量是相同的。
发布于 2013-02-23 03:17:00
malloc()确实使用了堆。我不推荐堆栈,除非只有很少的内存。发布于 2013-02-23 03:19:03
当你分配一些东西时,它是连续的吗?
是
当我制作具有平铺地图的游戏时,我甚至会在渲染时使用指针来访问平铺。
例如,如果地图是10x10,我会使用arrayName[14]来渲染瓷砖1。
还请记住,在某些地方,b而不是a将完全存储在内存中,如果您依赖于来自FORTRAN (如CBLAS)或某些特定设备和情况(如具有某些特定驱动程序的GPU )的代码,这可能会导致错误。
当你使用malloc时,它必须是连续的?
是,如果连续内存不可用,它将失败。一个很常见的错误是期望一个程序会工作,因为总的空闲内存存在,而没有考虑内存碎片。
我曾经做过一个游戏,因为它有30mb的内存,但无法加载16mb的图像,所以无法正常工作。我当时并没有意识到我的代码导致的内存碎片并没有使16mb的数据块可用。
如果不需要动态分配,我应该使用堆栈还是堆?
在C中,动态分配通常意味着堆分配,早期的C书籍甚至明确地说,malloc和类似的函数族(包括calloc)只在堆上操作。而自动分配尝试使用堆栈。
https://stackoverflow.com/questions/15031566
复制相似问题