我知道这是一个非常基本的问题。我从维基百科和几个MSDN页面读过内存management。但是我仍然不确定在程序执行期间如何处理以下处理。
当我在程序中声明一个长字符串时
请考虑我在.Net中使用C#,这是我的字符串s ='我是计算机编程的新手'
提前致谢。
答案 0 :(得分:2)
第一部分,字符串。
正如很多人告诉你的那样,有很多方法来表示字符串。最常见的做法是将字符串存储为数组。但是,您需要一些额外的信息:此数组的长度。
每种(程序性或命令式)语言都以不同的方式解决了这个问题。
有“pascal strings”,其中数组的前几个字节存储字符串的长度。
有“C字符串或以空字符结尾的字符串”,其中没有额外的字节来存储长度,但数组中的最后一个字节的值为零。
在COM中使用混合方法,即BSTR。它在开头使用4个字节来存储字符串的长度和一个两字节的标记(两个零字节)。它允许将字符串传递给C程序,同时快速获得长度。
功能语言是一个完全不同的商店。
第二部分,矩阵。
要存储多维(在你的情况下为二维)数组,必须对其进行“线性化”,即将其转换为一维数组以使用计算机的内存硬件。
所以要存储
float A[W][H];
至少分配
sizeof(float)*W*H
用于存储数据的字节的内存。通过访问地址
处的存储器字节来访问A [i] [j]addr(A) + (i * H + j)
或地址
addr(A) + (j * W + i)
这是C和Fortran使用的两种方法。
但是,如果您需要存储一些稀疏矩阵,可能还有其他一些选项。例如,您可以存储表示矩阵的非零元素的三元组(i,j,value)。