可能重复:
堆栈和堆的内容和位置
堆存储器和堆栈存储器存储在哪里?我的意思是硬盘上的位置?它们的大小有多大限制?
它可能不清楚,但是,当我阅读msdn doc并尝试深入理解Struct行为时.
来自msdn
处理堆栈:
这将带来性能提升.
并且:
每当您需要经常使用的类型并且大部分只是一个数据时,结构可能是一个不错的选择.
我不明白因为,我想当我传递一个方法的参数时,"复制值"过程必须比"复制参考"过程慢?
请告诉我为什么以下代码甚至在以下代码上运行strict C-99 compiler:
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n];
a[1]=10;
a[2]=5;
printf("%d %d",a[1],a[2]);
}
Run Code Online (Sandbox Code Playgroud)
变量声明必须在C中的任何其他语句之前发生吗?如果我们想要一个动态分配的数组,我们必须使用内存分配函数,malloc()但它是如何获取和输入整数并分配该大小的数组?
我只看到了这个缺点:你可以得到StackOverflow :)为什么不只使用堆?
在Java,C,C++中,函数的参数在堆栈上传递.函数体内的普通变量是在堆栈中创建的.
据我所知,每个线程的堆栈是有限的,有一些默认值,但相对较低:1-8 Mb.为什么不使用堆而不是堆栈.两者都在内存中,只是操作系统从地址A到B分离是堆,而从C到D是堆栈.
有可变的参数.它说有10个变量,每个变量4个字节.如果您阅读11而不是您可能会读取一些数据"内存"垃圾,也许正是您想要的黑客攻击或者您可能会遇到分段错误...如果操作系统检测到您是坏孩子.:) - 所以安全性不能成为使用Stack的理由.
假设我已经声明了一个字符数组并从用户那里获取一个字符串,如下所示:
char s[100000];
std::cin>>s;
Run Code Online (Sandbox Code Playgroud)
现在说用户输入了字符串"Program".我的角色数组如下:
'P''r''o''g''r''a''m''\0'......(99992 remaining indices with no/junk values)
Run Code Online (Sandbox Code Playgroud)
有没有办法释放占用那些99992指数的空间?类似地,如果我有一个大小为100000的整数数组,并且我在运行时只使用前10个索引,那么有没有办法在我的程序运行期间调整我的数组大小.我知道我们可以为此目的使用向量但是有可能以某种方式使用数组吗?对于整数数组,我知道我们可以动态声明数组,然后按照我们的要求声明大小,但是说我有10个整数的数组,如下所示:
1 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)
现在,我想只使用前9个索引和wnat来删除第10个索引.换句话说,随着动态分配,数组也可以动态删除吗?
编辑:我知道有可能使用STL,但我想知道我们是否可以在数组中做同样的事情?
我正在学习c ++,并想知道这样的程序是如何组织在主存储器中的.我知道有一个堆栈(带有堆栈框架)和一个堆.我知道动态分配的东西会在堆上分配它.这是由像malloc或的运营商完成的new.但我不能在这个小型的c ++程序中看到它们.
该程序由一个主类和一个名为的类组成MyClass.这堂课有:
int)main类定义了一个Myclass对象,并定义了一个指向该对象的指针.
那么 - 这一切如何在记忆中组织起来?
#include <iostream>
using namespace std;
class MyClass {
int i;
public:
MyClass(int n) {
i = n;
}
int get_nmbr() {
return this->i;
}
};
int main() {
MyClass myClass(100), *p;
cout << myClass.get_nmbr() << endl;
p = &myClass;
cout << p;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 原始数据类型(如char,bool和int)具有一些内存.假设char,它有1个字节的内存.当我们在代码中使用char变量时,变量必须要求1个字节的内存.在这种情况下,我们为什么不分配内存.因为我们从不为它分配内存,它如何使用内存,即在这种情况下CPU是否为它分配内存.我也读过某些地方,原始数据类型被放在堆栈上并在完成工作时被移除.什么样的堆栈?在这种情况下,堆栈是如何形成的?
在下面的代号中
#?include ?<stdio.h>
int main()
{
printf("Stack Overflow");
main();
}
Run Code Online (Sandbox Code Playgroud)
运行后,该程序编译器将打印"堆栈溢出"到栈overflow.Here我知道堆栈溢出意味着,这意味着它会打印,直到内存full.Here我的问题是它的内存是什么呢?堆栈的大小是多少?
编程中使用"堆栈"的频率如何?换句话说,如果我们用数组替换堆栈,我们会丢失一些东西吗?或者是否有任何特殊情况下堆栈不能被其他任何东西替换?我只是一个C++初学者,我所知道的堆栈就是他们用来存储数据的东西,所以这个主题对我来说似乎并不清楚.任何信息都是相关的.