C语言整型变量内存分配问题

定义了了 int a=10,a是分配在栈区,而10因为是常量,是不是分配在常量区?还是在给a在栈里分配的内存写入10的二进制?如果是分配在常量区,那么接着a=20,这一句改的是哪个内存?是栈里的内存还是10所在的常量区的那个内存?

2个回答

理论上10应该是常量分配在常量区,但是实际上没有任何编译器傻到这么做,因为不必要,int等简单类型可以直接装入寄存器,没必要再在常量区存它的一个副本。

常量应该都是存放在常量区的,赋值仅仅是将常量区中的常量值拷贝一份到栈或堆区,重新赋值即在常量区存放新值再拷贝到栈区覆盖旧值------个人理解,仅供参考~

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言内存分配及堆栈问题总结
1. C语言程序编译的内存分配,堆与栈的区别  C语言程序编译的内存分配: 1.栈区(stack) --编译器自动分配释放,主要存放函数的参数值,局部变量值等; 2.堆区(heap)  --由程序员分配释放; 3.全局区或静态区 --存放全局变量和静态变量;程序结束时由系统释放,分为全局初始化区和全局未初始化区; 4.字符常量区    --常量字符串放与此,程序
c语言---内存分配问题
内存分配问题 内存分配方式有三种: (1) 从静态存储区域分配。内存在程序编译的时候就已经分配好, 这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。 (2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建, 函数执行结束时这些存储单元自动被释放。 栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
C语言内存分配问题
C语言内存分配问题 1、C中内存分为四个区 栈:用来存放函数的形参和函数内的局部变量。由编译器分配空间,在函数执行完后由编译器自动释放。  堆:用来存放由动态分配函数(如malloc)分配的空间。是由程序员自己手动分配的,并且必须由程序员使用free释放。如果忘记用free释放,会导致所分配的空间一直占着不放,导致内存泄露。  全局局:用来存放全局变量和静态变量。存在于程序的整个运行期
C语言内存分配的问题
C语言内存分配问题 1、C中内存分为四个区 栈:用来存放函数的形参和函数内的局部变量。由编译器分配空间,在函数执行完后由编译器自动释放。 堆:用来存放由动态分配函数(如malloc)分配的空间。是由程序员自己手动分配的,并且必须由程序员使用free释放。如果忘记用free释放,会导致所分配的空间一直占着不放,导致内存泄露。 全局区:用来存放全局变量和静态变量。存在于程序的整个运行期
c语言内存分配问题
C语言内存分配问题1、C中内存分为四个区栈:用来存放函数的形参和函数内的局部变量。由编译器分配空间,在函数执行完后由编译器自动释放。 堆:用来存放由动态分配函数(如malloc)分配的空间。是由程序员自己手动分配的,并且必须由程序员使用free释放。如果忘记用free释放,会导致所分配的空间一直占着不放,导致内存泄露。 全局局:用来存放全局变量和静态变量。存在于程序的整个运行期间,是由编译器分配和
C语言--整型变量的种类
整型变量的基本类型符为int,这是用得最多的。编译时系统为它分配一定的字节(Turbo C分配2个字节,Visual C++分配4个字节)。2个字节可以表示的数值范围为-2^15~(2^15-1),即-32768~32767,如是4个字节,则把15换成31。 如果需要改变变量的字节数,可以定义为长整型或者是短整型,只要在int的前面加上修饰词long或者short即可。此外,有些情况下,要求变量
C语言内存分配-通俗理解
最近很多同学希望了解C语言的内存分配,虽然可以在互联网上找到诸多的讲解,但是你会发现要么不通俗易懂,要么不算太全面。而这些对于新手而言,又绝对会把你弄得晕头转向的,所以在此对网上和书本上的诸般讲解,进行了通俗的翻译和总结。
C语言定义整型变量
简单的变量定义,最简单,容易理解,没有更简单的了
内存分配函数(C语言)
C 标准函数库提供了许多函数来实现对堆上内存管理 malloc函数:malloc函数可以从堆上获得指定字节的内存空间(必须初始化) free函数:释放内存,防止内存泄露 calloc函数:与 malloc类似,但不需要初始化 realloc函数:重新分配内存头文件stdlib.hmallocmalloc函数可以从堆上获得指定字节的内存空间,其函数原型如下:void * malloc(int
C语言内存分配详解
在任何程序设计环境及语言中,内存管理都十分重要。在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的。因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题。第1节主要介绍内存管理基本概念,重点介绍C程序中内存的分配,以及C语言编译后的可执行程序的存储结构和运行结构,同时还介绍了堆空间和栈空间的用途及区别。第2节主要介绍C语言中内存分配及释放函数、函数的功能,以及如何调用这些函数申请/释放内存
c语言:通过指针变量访问整型变量
通过指针变量访问整型变量。程序:#includeint main(){ int a = 2, b = 3; int *p1=NULL, *p2=NULL; p1 = &a; p2 = &b; printf("a=%d,b=%d\n",a,b); printf("*p1=%d,*p2=%d\n",*p1,*p2); return 0;}结果:a=2,b=3*p1=2,*p2=3请按任意键继续. . 
c语言内存分配函数
三个函数的声明分别是:  void* realloc(void* ptr, unsigned newsize);  void* malloc(unsigned size);  void* calloc(size_t nelem, size_t elsize);  都在stdlib.h函数库内 原型:extern void *realloc(void *mem_address, uns
c语言内存分配
c语言内存分配
浅谈C,C++语言的基本数据类型的内存分配和指针的内存分配
C语言的基本类型变量的内存分配和指针内存分配方式的对比(int类型) 本文是学了数据结构之后,对 “int * & a ; ”这种类型变量的深入了解,同时也温习了很久之前学过的C语言知识。如果有不得当的地方,希望大家留言。
(十一)C语言静态内存分配
C语言静态内存分配时什么意思? 所谓静态内存分配,就是值我们并没有鲜明的指明内存分配,普通的变量的声明啦什么的,都需要内存,但是都是由系统自动分配的,所以叫静态内存分配。(暂时不考虑在哪一块内存区域分配) 例如一段程序: #include void swipe(int** p){ int temp = 999; *p = &temp; } void main(){
C_C_语言内存分配问题的探讨
关于C_语言内存分配问题的探讨的论文,值得参考一下。
C语言内存分配问题(整理)
C语言内存分配相关资料整理。包括C中内存分区、内存分配方式、常见的内存错误及其对策和动态分配释放内存举例。
c语言结构体内存分配问题
有些c语言的题很小,但是我们往往会忽略掉,面试的时候就会出这样的题比如,写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢? 开始学的时候,也被此类问题困扰很久。其实相关的文章很多,感觉说清楚的不多。结构体到底怎样对齐? 有人给对齐原则做过总结,具体在哪里看到现在已记不起来,这里引用一下前人的经验(在没有#pra
C语言好难——结构体的内存分配
结构体的内存分配,我个人是觉得比较蛋疼的,它有一个需要遵循的原则,地址对齐,也有人称为内存对齐,叫法没关系,反正我只是“拿来”,会用就行。        好了,先有这么一个概念,什么是内存对齐,先丢一边。……~(~o ̄▽ ̄)~o 。。。滚来滚去……o~(_△_o~) ~。。               设char占用1个字节,int占用4个字节。        那么问题1
C语言中结构体内存分配问题解析。
分析了编译器对结构体内存空间的分配
go语言内存分配之TCMalloc
tcmalloctcmalloc 优点 速度更快,比glicbc 2.3 快 占用更少的内存空间,8倍8-byte的对象内存分配中占用大约8N*1.01byte的头空间,而ptmalloc则会占用16N*byte的头空间 使用 在程序中只需使用“-ltmalloc”连接标识将其链接到程序中 综述 TCMalloc为每一个线程分配本地缓存,以满足小对象分配的需求,当需要时候,对象从中央数据结构移动到本
C语言的内存分配详解
最详细的,浅显易懂的讲述了,C语言的内存分配。
C语言,指针与内存分配
指针变量与内存分配 1. char * str1; //str1 只是一个指针,指针指向的空间还没有分配,所以此时用strcpy向str1所指向的内存 中拷贝内容将出错。利用malloc动态分配指向的内存(在堆中): str1=(char *)malloc(10) or str1=(char *)malloc(sizeof(char) *num)//分配num个char 所占有的字节(一
c语言堆与栈及内存分配
原文:http://www.cnblogs.com/TonyEwsn/archive/2010/01/29/1659496.html
c语言内存分配之局部变量内存分配
局部变量内存分配情况: 局部变量保存在栈中(保存地址由高地址到低地址)。 先定义先分配内存。            由此可见局部变量分配空间的顺序和变量的声明顺序直接相关,同时按照内存地址由高到低的顺序进行空间分配. 先定义,先分配,地址由高到低 数组越界问题(看图3和图4)       由于首先声明的是数组a[4],于是在高位
C和C++语言的内存分配详解
C和C++语言的内存分配详解
关于const常量的内存分配问题
关于C++中局部变量在栈中分配被无数人提到,本人也查看了别人的很多资料。我对这个问题的研究开始于高质量程序设计指南中关于const常量是否占内存空间的说法,原文为:在C语言中,用const定义的常量其实是值不能修改的变量,因此会给它分配存储空间;但是在C++中,const定义的常量要具体情况具体对待:对于基本数据类型的常量,编译器会把它放到符号表中而不分配存储空间,而ADT/UDT的const对象
二进制数给整型变量赋值?
C语言中的数据基本类型包括:char short int long float double . 用哪种类型定义的就叫XX类型变量,如字符型变量,整型变量,浮点型变量。各种变量中存储的数据,都是以二进制进行存储的。因类型的不同,采用的二进制编译格式不同。如:整形类都是用补码存储,浮点型采用IEEE754标准存储。1 c语言中,变量不可以用二进制数来赋值2 在c语言中,若要给变量赋整型值,则只可以用
关于c语言内存分配,malloc,free,和段错误,内存泄露
1.   C语言的函数malloc和free  (1) 函数malloc和free在头文件中的原型及参数        void * malloc(size_t size) 动态配置内存,大小有size决定,返回值成功时为任意类型指针,失败时为NULL。        void  free(void *ptr) 释放动态申请的内存空间,调用free()后ptr所指向的
简述C语言动态、静态内存分配
#include #include /** c语言静态内存分配 */ void func(int** address ) { //定义int类型的i变量,并赋值100 int i = 100; //把i对应的地址赋值给iPoint变量 *address = &i; } int main(int argc, char *argv[]) { //定义int类型的一级指针变量iPoin
面试题中常见的内存分配问题汇总
最近在准备面试,面试职位为C++软件开发类型,虽然还没有与某公司签约,但是经过多次的面试经验及过程进行分享! 程序的内存分配问题是每个IT公司都会问道的一个问题!现就内存分配问题分享我的总结。 内存总共有以下5类存储区:堆区、栈区、全局(静态)存储区、文字常量区以及程序代码区。 堆区:由程序员手动分配内存和释放内存,分配方式类似链表;若程序员不释放内存,则在程序结束时由系统释放。   在c
操作系统 内存分配与回收 C语言模拟(含源代码和.exe文件)
操作系统内存分配与回收C语言模拟。包含源代码和.exe可执行文件
结构体共用体内存分配问题
一、背景知识 1.zhijieduiqi
C语言之交换两个整型变量的值(四种方法)
C语言中有一道题目是交换两个整型变量的值,这是一道非常简单的题目,那么一共有几种方法呢?以下是我整理的四种方法,是在MAC系统x-code环境下编译并运行成功的,以下为截图: 方法一:通过引入第三方整型变量: 评论:一般认为这种方法最简单,需要思考的东西最少,简单实用 方法二:没有引入第三方变量,完全通过两个整型变量自身的作用进行交换值: 评论:这种方法主要是考察逻辑思维,相信正常
【C语言】给定两个整型变量的值,将两个值的内容进行交换(不同方法)
给定两个整型变量的值,将两个值的内容进行交换,现在我介绍几种不同的实现方法:法1:在主函数里实现,这样操作这两个值时并未重新开辟空间,直接交换可以达到目的。#include #include int main() {     int a = 10;     int b = 20;          int tmp = a;     a = b;     b = tmp;          pri
虚拟存储器管理——模拟内存分配与回收实验算法(c语言)
理解内存分配原理,特别是以页面为单位的虚拟内存分配方法。模拟存储管理中内存空间的管理和分配内存空间的管理分为固定分区管理方式,可变分区管理方式,页式存储管理,段式存储管理。
C语言的那些小秘密之内存分配
realloc()函数原型:extern void *realloc(void *mem_address, unsigned int newsize);语法:指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。 头文件:#include
C++中的const的内存分配问题
在c++我们知道一般是采用const来进行替代#define的。    例如:       const int N=3;//注意采用的是赋值的形式并且末尾有分号 #define N 3      在C中我们知道#define进行预定义的某个数是被分配内存的,其文件在编译预处理过程中就会用定义好的数据去替代文中的符号。     但是const却是不一样的,一般情况下编译器也是不为cons
整型变量
N前缀明确只是浏览代码,这是一个整数除法,会导致我们的问题!此外,当你的代码,N前缀会提醒你注意整数除法和溢出问题,每一次你在一个表达式或语句中使用一个整型变量。 匈牙利表示法的另一个优点是,它给了我们一个命名变量使用速记。例如,berror被理解为iserror,和napples是写作numberofapples速记方法。 一个认为的缺点的匈牙利命名法是它导致额外的工作,当一个变量的
C语言中整型变量的互换方法总结
方式1: 使用第三个变量来互换: int  a=8,b=12,c=0; c=a; a=b; b=c; 方式2: 使用加法(bug:可能会出现溢出): int a=8,b=12; a=a+b; b=a-b; a=a-b; 方式3: 使用异或运算(分析): int a=8,b=12; //0000 1000->a //0000 1100->b //0000 0100-
C语言的内存分配malloc()和free()
C语言的内存分配malloc()和free() 引言静态数据在程序载入内存时分配,而且自动变量的数据在程序执行块时分配,并在程序离开该块时销毁。另外,C语言可以在程序运行时分配更多的内存。比如说,你做一个通讯录,但是你不能确定到底有多少人需要存储,因此你就不能确定具体需要多少内存空间,因此你可以使用动态内存分配来解决这个问题,即有一个数据需要存储的时候再分配内存给它,这
C语言中的初始化及内存分配
http://blog.csdn.net/juana1/article/details/6301544 C语言中的初始化及内存分配 分类: VC编程2011-04-04 16:23 1722人阅读 评论(0) 收藏 举报 语言cfloatp2p存储div 很多字符串在用strcpy拷贝时会报错或者直接赋值时会出现乱码,都是因为没有初始化。 char *str = (c
C语言位段与联合体(union)的内存分配
union V { struct X { unsigned char s1:1; unsigned char s2:1; unsigned char s3:4; } x; unsigned char s1:1; unsigned char s2:1; unsigned char s3:4; int c; } v; void ma
C语言指针的内存分配和Java中的引用
核心内容:  1、C语言指针的核心知识点  2、处理指针相关问题的万能措施—-内存分配图  3、C语言的指针是如何过渡到Java中的引用的 最近一段时间一直在学习C语言的指针,也算是颇有心得吧,虽然从网上看了几篇关于指针的博文,但是感觉都不符合自己的口味,于是决定好好写一篇关于指针的文章。  C语言指针的核心知识点:  1、指针就是地址,地址就是内存单元的编号,范围是0到4G-
c中定义变量的内存分配顺序问题(极易错!!!)
对于c语言中大家都知道所有的变量都必须是先定义后使用的,但是但是,对于好多人而言,基本上没有人来注意自己的编译器和操作系统对这个东西是如何处理的, 1,如果全是一样的类型,比如全是int,编译器会如何分配呢??是从大到小还是从小到大,, 2,如果是基本的混合类型呢, 它又是先给那个分配呢,是不管呢??还是考虑一下呢?? 3, 数组的分配方式和基本类型一样吗??编译器又是如何处理的??如果是混
队列---C语言实现---三种内存分配方式
转自:http://myswirl.blog.163.com/blog/static/51318642201183025254801/ 队列是一种先进先出的结构。 排队就是一种典型的队列。首先轮到的是排在队伍前面的人,新入队的人总是排在队伍的最后。 队列的实现比堆栈要难得多。它需要两个指针,一个指向队头,一个指向队尾。 同时 ,数组并不像适合堆栈那样适合队列的实现,这是由于队列使用内存的方
C语言的内存分配malloc和释放free(32)
C语言的内存分配malloc和释放free :/**//************************************************************ Copyright (C), 1998-2006, Rx. Co., Ltd. FileName: mainApp.cpp Author: longronglin Version : 1.0 Date: 2006-10
C语言内存分配
C语言内存分配,有关内存分配机制、全局变量、局部变量、堆、栈等概念。
C语言 —— 内存分配及内存释放
在使用内存的过程中,很多时候问题并不在于管理指针,而在于管理它们指向的内存。还是从问题着手来总结。 1. 有时候我们的一个函数本该返回一个字符串,但当它返回调用者的时候,放回的字符串却是乱码。     这个涉及到了函数调用栈。     任何时候,拖函数返回指针,必须却好它指向的内存已经正确分配了。返回的指针可以指向静态分配的、调用者传入的或者通过malloc获得的缓冲
c语言内存分配方式
C语言程序的内存分配方式     1.内存分配方式     内存分配方式有三种:     [1]从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。     [2]在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中
相关热词 c# 识别回车 c#生成条形码ean13 c#子控制器调用父控制器 c# 写大文件 c# 浏览pdf c#获取桌面图标的句柄 c# list反射 c# 句柄 进程 c# 倒计时 线程 c# 窗体背景色
立即提问