首页 > 系统相关 >不含指针的结构体赋值实现,直接内存拷贝

不含指针的结构体赋值实现,直接内存拷贝

时间:2023-12-05 19:45:47浏览次数:36  
标签:struct strs int 内存 Initialize dword 拷贝 string 赋值

#include <stdio.h>
#include <stdlib.h>

struct A {
	int c;
	char b[20];
	char strs[10][10];
	int k;
};

int main() {
	//  A a = {...}; // 帮我初始化
	struct A a = {
		1, // Initialize c with some integer
		"Example String", // Initialize b with a string (fewer than 20 characters)
		{ // Initialize strs with strings (each fewer than 10 characters)
			"String1", // First string
			"String2", // Second string
			"String3", // Third string
			// You can initialize more or leave them empty which will default to zeros
		},
		42 // Initialize k with some integer
	};
	struct A b;
	b = a;
	printf("b.strs[0]=%s\n", b.strs[0]);
}

  

 

看下 b = a 的反汇编结果:

	struct A b;
	b = a;
009C18E0  mov         ecx,20h  
009C18E5  lea         esi,[a]  
009C18EB  lea         edi,[b]  
009C18F1  rep movs    dword ptr es:[edi],dword ptr [esi]  
	printf("b.strs[0]=%s\n", b.strs[0]);

  

sizeof(A)  =  128 ==  20h*4(dword)

 

标签:struct,strs,int,内存,Initialize,dword,拷贝,string,赋值
From: https://www.cnblogs.com/bonelee/p/17878001.html

相关文章

  • JVM内存用量的再学习
    JVM内存用量的再学习背景最近解决一个SQLServer的问题耗时很久.最终找到了一个看似合理的问题解释.但是感觉不能只是总结于数据库方面因为为了解决这个问题增加了很多监控措施.所以想就这这个问题,总结一下这次问题诊断过程中学习到的JVM相关知识.一个JVM的监控图......
  • Java 内存分析工具 Arthas 介绍与示例讲解
    目录一、概述二、Arthas安装三、Arthas主要组成结构四、Arthas通信主要流程五、Arthas快速入门讲解1)启动Arthas2)基础命令介绍3)jvm相关1、dashboard(实时数据面板)2、Thread(线程相关堆栈信息)3、jvm(查看当前JVM的信息)4、memory(查看JVM的内存信息)5、sysprop(查看/修改属性)6、s......
  • 内存管理相关概念 (翻译 by chatgpt)
    原文:https://www.kernel.org/doc/html/latest/admin-guide/mm/concepts.htmlThememorymanagementinLinuxisacomplexsystemthatevolvedovertheyearsandincludedmoreandmorefunctionalitytosupportavarietyofsystemsfromMMU-lessmicrocontrollerst......
  • C语言-动态内存管理(三)
    动态内存管理第一部分解释了什么是动态内存管理,有什么用,以及一些函数,第二部分主要讨论了动态内存在使用的时候会出现一些经典的错误,需要注意。那么这个第三部分主要讨论一些有关动态内存管理有关的比较经典的笔试题。题目1请问运行Test函数会有什么样的结果?voidGetMemory(char*p)......
  • Java获取CPU占用率、内存占用率
    packagetest.lyh.test;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;importjava.lang.management.ManagementFactory;importjava.lang.management.OperatingSystemMXBean;importjava.math.BigDecimal;importjava.math.RoundingMode......
  • Day12 jvm 内存模型JMM
    1.jvm内存模型JMM原帖链接JMM控制Java线程之间的通信,决定一个线程对共享变量的写入何时对另一个线程可见。每条线程在自己的工作内存中对共享变量(副本)进行操作,JMM再负责把这些操作同步到主内存中JVM1.8用Metaspace(元空间)(在JVM外的本地内存中)取代了方法区(MethodArea)(在......
  • 软件测试/人工智能|Python 变量解析:从基础概念到内存地址探究
    变量什么是变量?变量是在程序中用于存储数据的名称。它们可以存储各种类型的数据,比如数字、文本、列表、字典等等。变量类型在介绍变量时,可以提及Python中常见的变量类型,例如整数、浮点数、字符串、布尔值、列表、元组、字典等。如下所示:a=1b='muller'c='123'd=......
  • 深拷贝和浅拷贝
    在C++中,深拷贝和浅拷贝是两种不同的对象复制方式:浅拷贝:当我们创建一个对象的副本时,如果仅仅复制所有成员变量的数据,那么这就是浅拷贝。这在所有的变量都在栈内存中分配时工作得很好1。但是,如果有些变量是在堆内存中动态分配的,那么复制的对象变量也会引用同一块内存位置1。......
  • 聊一聊 .NET高级调试 中的一些内存术语
    一:背景1.讲故事在高级调试的旅程中,经常会有一些朋友问我什么是工作集(内存),什么是提交大小,什么是VirtualSize,什么是WorkingSet。。。截图如下:既然有很多朋友问,这些用口头也不怎么好描述,刚好上午有时间就系统的聊一下吧。二:内存术语解读1.VirtualSize是什么可......
  • go 内存管理
    协程栈go栈的位置1.Go协程栈位于Go-堆内存上2.Go堆内存位于操作系统虚拟内存上go栈的工作流程以main.main为出发点要记录runtime.main的栈基地址记录a和b的局部变量值开辟一个空间记录sum函数的返回值记录b和a的值,这里是为了方便sum在执行时候,......