在Common Lisp中的值是否只是用于将多个值打包到一个被调用者解构的列表中的语法糖?我问,因为我认为Common Lisp支持"true"多值返回,而不是像其他语言一样返回元组或列表,例如python.有人告诉我,这只是语法糖,所以我希望有人能够解释它.为了尝试理解values函数返回的类型,我输入了(type-of (values 1 2 3)),输出是BIT.我在Common Lisp参考中搜索了这个,我在数据类型部分找不到它.此外,任何人都可以共享一些资源,建议如何在Common Lisp中实现值函数?谢谢.
对于以下代码:
foo(int n){
int array[n];
}
Run Code Online (Sandbox Code Playgroud)
我理解这是无效的语法,并且它是无效的,因为c ++标准要求在编译时设置数组大小(尽管一些编译器支持以下语法).
但是我也理解以下是有效的语法:
bar(int n){
int *array = new int[n];
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这是允许的,是不是创建一个在运行时确定大小的数组?这样做是好的做法,还是应该使用向量,如果我需要这样做呢?
来自http://www.learncpp.com/cpp-tutorial/79-the-stack-and-the-heap/
以下是调用函数时发生的步骤序列:
- 函数调用之外的指令地址被压入堆栈.这是CPU在函数返回后记住去向的方式.
- 房间是在堆栈上为功能的返回类型.这只是一个占位符.
- CPU跳转到函数的代码.
- 堆栈的当前顶部保存在称为堆栈帧的特殊指针中.
- 在此点之后添加到堆栈的所有内容都被视为函数的"本地".
- 所有函数参数都放在堆栈中.
- 函数内部的指令开始执行.
- 局部变量在定义时被压入堆栈.
我不确定#6点是如何工作的.如果所有函数参数都放在堆栈上,它们如何被访问?
例如,有三个参数a,b并且c从顶部放置在堆栈上
| a |
| b |
| c |
| |
...
|___|
Run Code Online (Sandbox Code Playgroud)
现在当函数想要访问时会发生什么c?是a和b弹出?
任何人都可以解释为什么由malloc()/ 管理的内存池free()被称为堆?
基于[1]:http://www.google.com/url? q = http://gee.cs.oswego.edu/dl/html/malloc.html&sa=D&sntz=1&usg=AFQjCNHaQLotbBKKwYqxiiYWN1146BWzFw"Doug Lea的解释他的malloc()如何工作",我们称之为"堆"的数据结构根本不被使用.
我们称之为"堆",因为malloc()实现使用最适合的内存块选择来返回,这在历史上是使用最小块的块来实现的,按块大小排序?
作为C和C++程序员,我使用malloc并new分配内存.我只是想知道:操作系统如何分配内存?
它是从RAM还是从硬盘或其他地方分配的?
为了以防万一,我可以从硬盘借内存吗?
我是 C 和 C++ 新手。我知道每当调用一个函数时,它的变量都会在堆栈上分配内存,包括变量恰好是一个指针,该指针指向通过mallocor分配在堆上的数据new(但我听说不能保证malloc分配的存储100%在堆上,如果我错了,请纠正我)。例如,
Void fn(){\n Member *p = new Member()\n}\n \nRun Code Online (Sandbox Code Playgroud)\n或者
\nVoid fn() {\n int *p = (int*) malloc( sizeof(int) * 10 ); \n}\nRun Code Online (Sandbox Code Playgroud)\n如果我错了,请纠正,在这两种情况下,变量p(保存堆上分配的对象的地址)都在堆栈上,并且它指向堆上的对象。\n所以说所有的都正确吗?我们声明的变量位于堆栈上,即使它们可能指向堆上的某些内容?\n让\xe2\x80\x99s 说局部变量指针的地址p加载到内存地址001,它具有位于堆上的成员对象的地址,该地址是002。我们可以画这样的图。\n
如果这是正确的,我的下一个问题是,我们是否可以拥有一个实际位于堆上的指针,并且它指向位于堆栈上的变量?如果不可能,该指针是否可以指向位于堆上的变量?\n也许这个问题的另一种表达方式是:为了访问堆中的某些内容,我们只能通过堆栈上的指针来访问它?\n可能的图表如下所示
\n如果可能的话,我可以在这里举个例子吗?
\n\nstruct forcePin {
char _name[512];
};
struct forcePin *_forcePin[500000];
_forcePin[i] = (struct forcePin *) malloc (sizeof (struct forcePin));
Run Code Online (Sandbox Code Playgroud)
我可以知道如下所示的线路在做什么?
_forcePin[i] = (struct forcePin *) malloc (sizeof (struct forcePin));
Run Code Online (Sandbox Code Playgroud)
我不熟悉c,如果你能告诉我如何使这一行也是C++格式的.谢谢