已知C语言中main函数的原型为int main(int argc, char **argv)。argv 数组指向的那些字符串驻留在哪里?它们位于哪个内存段?数据、栈还是堆?
谢谢。
我正在使用GCC 4.8.1,它似乎没有将const变量本地存储在DATA段的main中.下面是3个这样的程序的代码和内存映射:
代码1:
int main(void)
{ //char a[10]="HELLO"; //1 //const char a[10] = "HELLO"; //2
return 0;
}
MEMORY MAP FOR ABOVE:
text data bss dec hex filename
7264 1688 1040 9992 2708 a.exe
Run Code Online (Sandbox Code Playgroud)
代码2:
int main(void)
{
char a[10]="HELLO";
//const char a[10] = "HELLO";
return 0;
}
MEMORY MAP FOR 2:
text data bss dec hex filename
7280 1688 1040 10008 2718 a.exe
Run Code Online (Sandbox Code Playgroud)
代码3:
int main(void)
{
//char a[10]="HELLO";
const char a[10] = "HELLO";
return 0;
}
MEMORY MAP …Run Code Online (Sandbox Code Playgroud) #include <stdio.h>
main()
{
int i = 5;
printf("%d \n" , &i);
}
Run Code Online (Sandbox Code Playgroud)
重复执行上述程序会导致变量的地址不同i吗?
举个例子.
#include "stdio.h"
int global_var=5;
int main ()
{
int local_var=6;
//some statements
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果main函数是唯一的入口点,那么声明和赋值何时global_var发生?
在相关的说明中,是global_var在堆还是堆栈中分配?另外,有没有办法从函数声明一个全局变量,同时尊重入口点?
一般来说,我想知道成员函数的static局部变量存储在哪里?即,如果static变量仅在static函数内部使用,则该变量是否仅初始化一次?
请参考下面的代码
std::string const CONST1 = "const1";
std::string const CONST2 = "const2";
std::string const CONST3 = "const3";
class Test
{
public:
static const std::vector<std::string> GetSomeMap();
}
const std::vector<std::string> Test::GetSomeMap()
{
static std::vector<std::string> SomeMap = boost::assign::list_of(CONST1)(CONST2)(CONST3);
return SomeMap;
}
Run Code Online (Sandbox Code Playgroud)
通过上面的代码,声明为有优势SomeMap吗static?(我希望它只初始化一次。)
例如,如果我有一个小功能:
int sum(int a, int b)
{
int result = a+b;
return result;
}
Run Code Online (Sandbox Code Playgroud)
这里result是一个局部变量,根据我的理解,它应该只存在于函数的执行时间.该函数的调用者如何能够检索sum()函数的返回值,该函数只是局部变量的值result?只是想知道函数内声明的局部变量的值是如何返回给调用函数的.我知道这发生在堆栈中,但我想知道它是如何发生的.
在下面的代码中,2打印出来.
int x = 1;
int f(int y)
{
return x;
}
int main() {
x = 2;
printf("%d", f(0));
}
Run Code Online (Sandbox Code Playgroud)
如果我们在C中有静态作用域,它会怎么样?为什么不1打印?
印花 2在这种情况下不是动态范围,是吗?
我认为在静态作用域中它应该使用最近的x到函数定义.
我有以下脚本:
typedef struct {
uint8_t red;
uint8_t green;
uint8_t blue;
} color;
color c1;
color* c2 = malloc(sizeof(color));
Run Code Online (Sandbox Code Playgroud)
我想知道 c1 和 c2 的存储位置。我知道 malloc 存储在堆上,但是 c2 是一个指针并且那些存储在堆栈中?c1 是存储在堆上还是堆栈上?
我不太了解黑客,c,汇编,记忆和所有这些东西,所以我不能自己解决我的问题.
因此,缓冲区溢出溢出到其他变量地址并破坏它们.所以我测试了它确实如此.而且我认为如果它可以溢出常量变量缓冲区溢出必须超级供电并且我测试过,但它不会溢出const变量.
这是为什么?
int a;
char buffer[8];
Run Code Online (Sandbox Code Playgroud)
和
const int a;
char buffer[8];
Run Code Online (Sandbox Code Playgroud)
通过'buffer'的大小在变量'a'的地址前面有变量'buffer'的地址.在分配给内存时,const变量中有什么特殊的东西吗?
我的示例代码:
#include <stdio.h>
#include <string.h>
int main() {
char buffer1[8];
const int a=0; //vs int a=0;
char buffer2[8];
strcpy(buffer1,"one");
strcpy(buffer2,"two");
printf("Buffer 2 [%p]: %s\n",buffer2,buffer2);
printf("a [%p]: %d\n",&a,a);
printf("Buffer 1 [%p]: %s\n",buffer1,buffer1);
printf("\nCopy Buffer\n\n");
strcpy(buffer2,"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
printf("Buffer 2 [%p]: %s\n",buffer2,buffer2);
printf("a [%p]: %d\n",&a,a);
printf("Buffer 1 [%p]: %s\n",buffer1,buffer1);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 在一个简单的 C 程序中,如果我malloc有一个指向变量或数组的点,就内存映射而言,这部分内存分配到哪里?我对计算机编程很陌生,所以我不确定不同的变量在内存中的存储方式不同。
此外,全局变量(例如int x = 5)将存储在内存中的何处?
最后,有没有关于 C 语言如何与底层硬件交互的材料?我在网上找到的都是和C语法有关的,但是我太菜了,看不懂编译器的书。
如果这不清楚,请告诉我。