精华内容
下载资源
问答
  • 数组内存大小
    千次阅读
    2021-11-11 14:17:26

    1、数组内存大小判断方法

    直接用关键词sizeof进行判断。

    2、案例

    2.1 源文件

    andy@andy-virtual-machine:~/GNU_C_Programming/unpakage_dir$ tree
    .
    ├── array.c
    └── sizeArray.c

    0 directories, 2 files
    andy@andy-virtual-machine:~/GNU_C_Programming/unpakage_dir$ 

    2.2 源代码

    andy@andy-virtual-machine:~/GNU_C_Programming/unpakage_dir$ cat sizeArray.c 

    
    #include<stdio.h>
    #include<stdlib.h>
    #include<strings.h>
    #include<string.h>
    extern int arrayInteger[0];
    extern int arrayInteger_dummy[0];
    extern int arrayDimension();
    int array[0];
    
    int main(int argc, char* argv[])
    {
    	int ret = 0;
    	printf("length of arrayInteger is: %d, arrayInteger[0] = %d, arrayInteger[1] = %d\n", sizeof(arrayInteger), arrayInteger[0], arrayInteger[1]);
    
    
    	printf("length of arrayInteger_dummy is: %d\n", sizeof(arrayInteger_dummy));
    	printf("length of array is: %d\n", sizeof(array));
    	
    	arrayDimension();
    	return ret;
    }
    

    andy@andy-virtual-machine:~/GNU_C_Programming/unpakage_dir$ cat array.c 

    
    #include<stdio.h>
    #include<strings.h>
    #include<string.h>
    #include<stdlib.h>
    
    #define NUM (2)
    int arrayInteger[NUM] = {10, 20};
    
    int arrayDimension(void)
    {
    	int size= 0;
    	size= sizeof(arrayInteger) / sizeof(arrayInteger[0]);
    	printf("size= %d, arrayInteger[0]=%d, arrayInteger[1]=%d\n", size, arrayInteger[0], arrayInteger[1]);
    	return size;
    }
    

    2.3 运行结果

    andy@andy-virtual-machine:~/GNU_C_Programming/unpakage_dir$ ls 
    array.c  sizeArray.c
    andy@andy-virtual-machine:~/GNU_C_Programming/unpakage_dir$ gcc -o sizeArray sizeArray.c array.c 
    andy@andy-virtual-machine:~/GNU_C_Programming/unpakage_dir$ ls 
    array.c  sizeArray  sizeArray.c
    andy@andy-virtual-machine:~/GNU_C_Programming/unpakage_dir$ ./sizeArray 
    length of arrayInteger is: 0, arrayInteger[0] = 10, arrayInteger[1] = 20
    length of arrayInteger_dummy is: 0
    length of array is: 0
    size= 2, arrayInteger[0]=10, arrayInteger[1]=20
    andy@andy-virtual-machine:~/GNU_C_Programming/unpakage_dir$ 
     

    更多相关内容
  • 数组内存大小

    2021-08-12 17:08:22
    sum [ ] 数组变量定义见上一篇博客 int s = sizeof(sum); printf("s = %d",s); 运行结果:(sum数组大小) 分析:int 占 4字节,101个 int 型变量,所以sum数组内存大小为404个字节。

    sum [ ]  数组变量定义见上一篇博客

    	int s = sizeof(sum);
    	printf("s = %d",s);

    运行结果:(sum数组大小)

    分析:int  占 4字节,101个 int 型变量,所以sum数组内存大小为404个字节。

     

    展开全文
  • 一、二维数组内存大小计算、 二、二维数组内存大小意义、





    一、二维数组内存大小计算



    给定一个二维数组 : 该 二维数组 中有 4 4 4 个 一维数组 , 每个一维数组有 10 10 10char 数据 ;

        // I. 二维数组
        char array[4][10] = {"abc", "123", "258", "sfd"};
    

    计算二维数组大小 : 40 40 40 字节 ;

        // 求二维数组总的内存大小
        int array_len = sizeof(array);
    

    计算一维数组大小 : 该 二维数组 中有 4 4 4 个 一维数组 , 每个一维数组有 10 10 10 字节 ;

        // 求二维数组中的一位数组的内存大小
        int array_0_len = sizeof(array[0]);
    

    计算二维数组中有多少个一维数组 : 4 4 4 个 ;

        // 求二维数组中一维数组个数
        int len = sizeof(array) / sizeof(array[0]);
    

    代码示例 :

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
        // 循环控制变量
        int i = 0, j = 0;
        // 二维数组中的一维数组个数
        int num = 4;
    
        // 排序时 , 交换指针变量时的临时变量 , 存储指针指向的内存所存储的数据
        char tmp[10];
    
        // I. 二维数组
        char array[4][10] = {"abc", "123", "258", "sfd"};
    
        // 求二维数组总的内存大小
        int array_len = sizeof(array);
    
        // 求二维数组中的一位数组的内存大小
        int array_0_len = sizeof(array[0]);
    
        // 求二维数组中一维数组个数
        int len = sizeof(array) / sizeof(array[0]);
    
        // 打印上述大小
        printf("array_len = %d, array_0_len = %d, len = %d\n", array_len, array_0_len, len);
    
        // 命令行不要退出
        system("pause");
        return 0;
    }
    
    

    执行结果 :

    在这里插入图片描述





    二、二维数组内存大小意义



    编译器操作 二维数组 时 , 只关心 二维数组 的整体内存结构 , 下面的二维数组 有 4 4 4 10 10 10 列 ;

        // I. 二维数组
        char array[4][10] = {"abc", "123", "258", "sfd"};
    

    当使用数组下标进行遍历时 ,

    array[2]
    

    相当于

    *(array + 2)
    

    由此可以看出 , array 的每个 跳转步长 是 10 10 10 字节 , array + 2 相当于跳了 20 20 20 字节 , 才能访问到第 3 3 3 个元素 array[2] ;


    正是由于 上述 跳转步长 的问题 , 在函数中 , 形参 必须是 二维数组 , 不能是 二维指针 ;

    /*
     * 此处遍历时 , 注意指针的步长 ,
     * 传入一个二级指针 char ** , 会出错
     * 如果传入 二级指针 ,
     * array[i] 等同于 *(array + i)
     * array 的步长是 10
     */
    int print_str(char array[4][10], int num)
    {
        // 循环控制变量
        int i = 0;
    
        // 判断指针合法性
        if(array == NULL)
        {
            printf("array == NULL\n");
            return -1;
        }
    
        // 打印二维数组中的字符串
        for(i = 0; i < num; i++)
        {
            // 使用数组下标形式访问
            printf("%s\n", array[i]);
            // 使用指针访问
            //printf("%s\n", *(array + i));
        }
    
        return 0;
    }
    
    展开全文
  • 一、数组内存分配方式 C++中数组内存中也有静态分配和动态分配的区别。静态数组建立的方式为:A a[],它在栈上分配空间;动态方式是使用new,malloc在堆上分配。 数组要么在静态存储区被创建(如全局数组),...

    一、数组的内存分配方式

    C++中数组在内存中也有静态分配动态分配的区别。静态数组建立的方式为:A a[],它在栈上分配空间;动态方式是使用new,malloc在堆上分配。

    数组要么在静态存储区被创建(如全局数组),要么在栈或堆上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。

    程序中用指针指向了一个常量字符串"world",C++常量字符串存在常量存储区,且不能修改,故会出错。
    数组的在栈上分配,或堆上分配的区别可以看下例:将test和main函数修改为下:

    很明显程序程序编译时出现:warning C4172: returning address of local variable or temporary。在test调用结束后在栈上分配的数组已经销毁,p即为野指针指向无效内容。这里把数组名作为l函数返回值。如果换成下面注释的代码在堆上分配则没有问题,注意最后的'\0',字符串的最后是以'\0'来判断结束的,不然会出界输出无效内容。这里可以看出C++数组在内存中的存储形式与上篇内容介绍的一样。将test改为如下:

    静态数组名用sizeof可以知道数组实际所占的内存大小,而指向数组的指针占用空间即为普通指针的大小。当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针

    二、数组作为函数参数传递时退化为指针

    对字符串进行 sizeof 操作的时候,会把字符串的结束符“\0”计算进去的; sizeof为运算符

    进行 strlen操作求字符串的长度的时候,不计算\0 的。 strlen是库函数参数类型是char*,制单遇到“\0”才会结束。

    数组作为函数参数传递的时候,已经退化为指针了,Func 函数的参数 a 只是表示一个指针,那个 100 不起任何作用的。改成void Func(char a[2]),输出结果不变。

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    void Func(char a[100]) {
        printf("%d\n", sizeof(a));//4
        printf("%d\n", strlen(a));//5
    }
    
    int main() {
        char str[] = "Hello";
        printf("%d\n", sizeof(str));//6
        printf("%d\n", strlen(str));//5
        char *p = str;
        printf("%d\n", sizeof(p));  //4
        Func(str);
    }

     

    输出:6 5 4 4 5

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    void Func(char a[100]){
        printf("%d\n",sizeof(a));
        printf("%d\n",strlen(a));
    }
    int main(){
        char str[100]="Hello";
        printf("%d\n",sizeof(str));//100
        printf("%d\n",strlen(str));
        char *p=str;
        printf("%d\n",sizeof(p));
        Func(str);
    }

    输出:100 5 4 4 5

     

    汇总代码:

    void calChar(char * a)
    {
    	cout <<"calChar:sizeof(a)="<<sizeof(a)<<" strlen(a)="<<strlen(a)<<endl;
    	cout <<"calChar: "<< a << endl;
    }
    
    int main()
    {
    	//CPicTest::Instance().printInfo();
    	//test();
    
    	char a[11] = "hellohello"; //在栈上       "hellohello"字符串后面默认还有一个 '\0'
    	char *b = "hahahahaha";    //在静态存储区 "hellohello"字符串后面默认还有一个 '\0'
    	char* c = new char[6];     //在堆上
    	c[0] = 'h';
    	c[1] = 'e';
    	c[2] = 'h';
    	c[3] = 'e';
    	c[4] = 'h';
    	c[5] = '\0'; //如果不添加结束符,输出会乱码
    
    	a[0] = 'H';
    	//b[0] = 'H';//编译可以成功,运行会出错
    	c[0] = 'H';
    	
    	cout << a << endl;
    	cout << b << endl;
    	cout << c << endl;
    	cout << sizeof("hahahahaha");
    
    
    	cout <<"sizeof(a) = "<<sizeof(a)<<" strlen(a) = "<<strlen(a)<<endl;  //输出11 10
    	cout <<"sizeof(b) = "<<sizeof(b)<<" strlen(b) = "<<strlen(b)<<endl;  //输出 4 10
    	cout <<"sizeof(b) = "<<sizeof(c)<<" strlen(b) = "<<strlen(b)<<endl;  //输出 6 5
    	calChar(a); // 输出4 10
    	calChar(b); // 输出4 10
    	calChar(c); // 输出4 5
    

    如果c[5] = '\0'注释掉,输出为:

     


    在上一篇关于C++中类在内存中分配的介绍举例时发现一个问题,当两个指针指向同一个对象时,发现delete一个指针销毁该对象后,用另一个指针扔能调用该类的函数,这个是野指针应该有错啊。看下面的例子:

    程序运行结果:

    即两次输出class of a,一次是在test函数内,一次是s调用。test内的a分配在栈上,函数结束后应该就销毁了,为什么s还能调用fun。原来类中的成员数据和函数是存放在不同位置的。C++类的方法存放在"程序代码区",而类中的数据成员(对象数据成员)存放在类的实例对象中,即该成员数据存放在堆或栈中。s指向对象的成员数据已销毁,而类的方法还在。

    若将上面代码第8行改为:cout<<"class of a:"<<this->num<<endl;程序运行结果为:

     即s输出的数据成员num为无效,因为该对象已释放。关于C++内存管理还有很多内容,需要进一步加强学习。

     

    参考:

    https://blog.csdn.net/u011555996/article/details/79496156

    https://www.cnblogs.com/seven7seven/p/3659309.html

     

    展开全文
  • c语言获得动态分配内存后的数组内存大小 用一个函数 :_msize(); ★注意:该函数为Windows独有★ int* s = (int*)malloc(sizeof(int));  int i;  for(i = 0;i &lt; 1000;i++)  {  s = (int*)realloc(s,...
  • c语言数组内存中分配的方法:1、首先我们打开C语言编译器,可以选择Visual Studio、Code::Blocks或者Dev-C++等软件,这里是以Visual Studio为例,等待整个程序完全加载入内存2、由于VS是通过解决方案来管理的,...
  • 内存学制是社会的上层建筑。 西迁精神反映了西迁人响应国家决策的爱国情怀以及敬业奉献的优良传统,这与社会主义核心价值观个人行为层面中( )相契合。 excel2010中,说明数据透视表与图表不同,他不随着数据清单...
  • php 查看数组占用的内存大小

    千次阅读 2016-08-25 17:53:34
    function convert($size) { $unit=array('b','kb','mb','gb','tb','pb'); return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i]; } $start = memory_get_usage();
  • js数组内存分配

    千次阅读 2021-02-22 10:56:12
    V8中对数组做了一层封装,使其有两种实现方式:快数组和慢数组,快数组底层是连续内存,通过索引直接定位,慢数组底层是哈希表,通过计算哈希值来定位。两种实现方式各有特点,有各自的使用情况,也会相互转换。 一...
  • c++如何获得数组大小

    万次阅读 2018-01-14 20:33:26
    java有可以获得数组大小的函数,但是c++没有,在写函数的时候发现了一些问题,就是传数组名的时候,会在函数中将数组退化成指针,得不到想要的结果,使用引用之后就不会有这样的问题#include #include #include ...
  • JAVA数组所占内存大小的对比

    千次阅读 2015-04-23 15:33:00
    第一个是基本类型数组,第二个使用的是Float对象数组 public class SummaryModel{ private float[] summaryData; public float[] getSummaryData() { return summaryData; } public vo...
  • 获取c数组大小

    2021-12-13 17:10:05
    sizeof是编译时运行符,其只能获取编译时确定大小的东西,其操作对象可以是类型,也可以是对象,数组的sizeof值等于数组所占用的内存字节数 理论上是可以的 验证一下: root@mkx:~/workspace/learn# gcc arrSize...
  • 之前跟同学讨论过numpy数组的占用空间大小问题,但是今天给忘了,又重新试验了一下,主要是利用sys模块的getsizeof函数,使用的版本是 Python3.5。记录下来,以备后忘。 问题 一个空的numpy数组对象占用多大...
  • 问题:在java中,一维数组和二维数组在数据量一样的情况下,开辟的内存大小是怎样的? 一、尝试阶段: 1、代码一: public class OneArrayMemory{ public static void main(String[] args){ int num1 = 1024*...
  • 今天我们来聊聊二维数组及其二维数组的动态内存分配关知识。 1.数组的基本定义 我们都知道,数组是典型的线性存储,是一种最基本的存储表示方法, 把逻辑上相邻的元素存储在物理位置相邻的存储单元中,由此得到的...
  • java – 调整大型数组大小

    千次阅读 2021-04-08 11:32:03
    我正在处理我的应用程序中的大型数组,需要调整它们的大小.假设您有一个2Gb的数组,并且您希望将其调整为3Gb.有没有办法在不需要暂时5Gb的情况下调整大小?例如,给定使用-Xmx1G标志的1Gb堆:public class Biggy {...
  • C语言——数组内存空间分配

    千次阅读 2019-04-02 16:15:49
    参考:... 研究了下变量&数组定义时的内存分配,发现不一样,真的顺序还是看编译器: #include<stdio.h> int main() { int a[4] = {11,12,13,14}; int b[4] = {21,22,23,24}; i...
  • 数组内存分配概念

    千次阅读 2018-01-02 12:08:27
    在这里解答一下: int arr[4]; &arr[1] = arr[0] + sizeof(int) ; ...静态分配, 即普通数组, 由于在栈中分配, 而栈的... 动态数组内存分配在heap中。 而heap 的生成是由低地址向高地址生成。 所以有: &arr[0
  • 数组大小分配(动态内存分配)

    千次阅读 多人点赞 2020-02-22 21:31:40
    在使用数组的时候,总是有一个问题,数组应该有多大?...这种分配固定大小内存分配的方法称为静态内存分配。但是这种分配方法存在比较严重的缺陷,特别是处理某些问题时,在大多数情况下会浪费大量的...
  • C语言中怎么求动态数组大小

    千次阅读 2016-03-27 19:29:00
    解释:sizeof() keyword是求出对象所占用的内存空间的大小,so, sizeof(a)是算出整个数组占用的空间的大小。 由于是整数数组。一个整数在32位系统上占用4个字节,不同的系统数值可能不同, 用siz...
  • 如何在Python中分配数组大小

    千次阅读 2020-12-08 06:36:55
    但是由于列表可能会变得非常大,而不是在内存中移动整个列表,所以Python选择只使用引用(C术语中的“指针”)。如果将一个指定给另一个变量,则只指定对它的引用。这意味着您可以让两个变量指向内存中的同一列表:>...
  • Java对象内存大小计算

    万次阅读 多人点赞 2018-07-03 14:43:34
    最近在读《深入理解Java虚拟机》,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存? 在网上搜到了一篇博客讲的非常好:...
  • c语言计算数组大小

    千次阅读 2022-04-02 21:49:31
    它是一个运算符,在编译时就计算出变量的内存大小。需要熟练它的使用规则。 uint8_t val8; // 长度1 uint32_t val32; // 长度4 uint8_t* ptr8; // 长度4 uint32_t* ptr32; // 长度4 uint8_t arr8[] = {1,2,3,4,5,6...
  • C++获取数组大小

    千次阅读 2015-07-04 17:19:20
    首先想到的是sizeof()函数 但经过试验发现这个函数返回的是数组的字节数,不是元素个数 int a[5]; a[1] = 1; a[3] = 2; cout 这个就可以得到元素个数了。但是整型元素怎么只占4个字节啊?
  • Java中有两种类型的数组:基本数据类型数组;对象数组;当一个对象使用关键字“new”...如果你创建了一个空间大小为10的整型数组,情况是一样的,一个数组对象所占的空间在堆上被分配,然后返回其引用。二维数组那么...
  • 涉及数组大小端问题 一、什么是大小端? 对于十六进制数0x12345678,其在内存中表示如下表: 0x4000 0x4001 0x4002 0x4003z 大端 0x12 0x34 0x56 0x78 小端 0x78 0x56 0x34 0x12 可以得出大小端的概念...
  • 切片是一个相对简单的结构体struct:reflect.SliceHeader,因为我们知道切片是引用一个备份的数组(或字符串——byte数组),我们可以简单地手动计算它的大小: sliceint := make([]int32, 1000)
  • 2.结构体中字符型(char)数组在分配内存时会多分配3个字节 示例及运行结果如下 #include <stdio.h> #include <stdlib.h> struct student { long no; char sex; char name[20]; int age; float score...
  • C语言总结第七章、数组一维数组一维数组的定义一维数组的引用一维数组的初始化程序举例二维数组及多维数组二维数组的定义二维数组元素的引用二维数组元素的初始化程序举例字符数组和字符串字符数组 第七章、数组 ...
  • C++ Code:动态分配数组内存的六种方法

    万次阅读 多人点赞 2017-12-25 10:30:36
     如何快速给数组分配自定义长度的内存,方法有哪些?  本博客提供六种方法介绍,包含各种常用用法,且代码片亲自 编写-注解-编译-通过,对读者负责。 阐述:  提到动态分配C++的数组,我们想到的标签会有:malloc...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 579,989
精华内容 231,995
关键字:

数组内存大小