How to be a Programmer
  • How to be a Programmer: Community Version
  • LANGS
  • How to be a Programmer: Community Version
    • Appendix A - Bibliography/Websiteography
    • Appendix B - History
    • Contributions
    • Glossary
    • Creative Commons Attribution Share-Alike
    • Summary
    • 1. Beginner
      • Personal-Skills
        • Learn to Debug
        • How to Debug by Splitting the Problem Space
        • How to Remove an Error
        • How to Debug Using a Log
        • How to Understand Performance Problems
        • How to Fix Performance Problems
        • How to Optimize Loops
        • How to Deal with I/O Expense
        • How to Manage Memory
        • How to Deal with Intermittent Bugs
        • How to Learn Design Skills
        • How to Conduct Experiments
      • Team-Skills
        • Why Estimation is Important
        • How to Estimate Programming Time
        • How to Find Out Information
        • How to Utilize People as Information Sources
        • How to Document Wisely
        • How to Work with Poor Code
        • How to Use Source Code Control
        • How to Unit Test
        • Take Breaks when Stumped
        • How to Recognize When to Go Home
        • How to Deal with Difficult People
    • 2. Intermediate
      • Judgment
        • How to Tradeoff Quality Against Development Time
        • How to Manage Software System Dependence
        • How to Decide if Software is Too Immature
        • How to Make a Buy vs. Build Decision
        • How to Grow Professionally
        • How to Evaluate Interviewees
        • How to Know When to Apply Fancy Computer Science
        • How to Talk to Non-Engineers
      • Mentoring
        • How to Be Mentored
        • How to Mentor Others
      • Personal-Skills
        • How to Stay Motivated
        • How to be Widely Trusted
        • How to Tradeoff Time vs. Space
        • How to Stress Test
        • How to Balance Brevity and Abstraction
        • How to Learn New Skills
        • Learn to Type
        • How to Do Integration Testing
        • Communication Languages
        • Heavy Tools
        • How to analyze data
      • Team-Skills
        • How to Manage Development Time
        • How to Manage Third-Party Software Risks
        • How to Manage Consultants
        • How to Communicate the Right Amount
        • How to Disagree Honestly and Get Away with It
    • 3. Advanced
      • Compromising-Wisely
        • How to Fight Schedule Pressure
        • How to Understand the User
        • How to Get a Promotion
      • Serving-Your-Team
        • How to Develop Talent
        • How to Choose What to Work On
        • How to Get the Most From Your Team-mates
        • How to Divide Problems Up
        • How to Handle Boring Tasks
        • How to Gather Support for a Project
        • How to Grow a System
        • How to Communicate Well
        • How to Tell People Things They Don't Want to Hear
        • How to Deal with Managerial Myths
        • How to Deal with Organizational Chaos
      • Technical-Judgment
        • How to Tell the Hard From the Impossible
        • How to Utilize Embedded Languages
        • Choosing Languages
  • Cómo ser un Programador: Versión Comunitaria
    • Apéndice A - Bibliografía/Sitografía
    • Apéndice B - Historia
    • Contribuciones
    • Glossary
    • Licencia Creative Commons Atribución-CompartirIgual
    • Resumen
    • 1. Principiante
      • Personal-Skills
        • Aprende a depurar
        • ¿Cómo depurar dividiendo el espacio del problema?
        • ¿Cómo eliminar un error?
        • ¿Cómo depurar utilizando un registro (Log)?
        • ¿Cómo entender problemas de rendimiento?
        • ¿Cómo solucionar problemas de rendimiento?
        • ¿Cómo optimizar bucles?
        • ¿Cómo manejar el costo de la entrada/salida (E/S)?
        • ¿Cómo gestionar la memoria?
        • ¿Cómo manejar errores intermitentes?
        • ¿Cómo aprender habilidades de diseño?
        • ¿Cómo realizar experimentos?
      • Team-Skills
        • ¿Por qué es importante la estimación?
        • ¿Cómo estimar el tiempo de programación?
        • ¿Cómo encontrar información?
        • ¿Cómo utilizar a las personas como fuentes de información?
        • ¿Cómo documentar de manera inteligente?
        • ¿Cómo trabajar con un código deficiente?
        • ¿Cómo Utilizar el Control de Código Fuente?
        • ¿Cómo realizar pruebas unitarias?
        • Tomarse descansos cuando te sientes bloqueado
        • ¿Cómo reconocer cuándo es hora de ir a casa?
        • ¿Cómo lidiar con personas difíciles?
    • 2. Intermedio
      • Judgment
        • ¿Cómo equilibrar la calidad contra el tiempo de desarrollo?
        • ¿Cómo gestionar la dependencia del sistema de software?
        • ¿Cómo decidir si el software es demasiado inmaduro?
        • ¿Cómo tomar una decisión de compra frente a desarrollo interno?
        • ¿Cómo crecer profesionalmente?
        • ¿Cómo evaluar a los candidatos en una entrevista?
        • ¿Cómo saber cuándo aplicar conceptos avanzados de ciencias de la computación?
        • ¿Cómo hablar con personas no ingenieras?
      • Personal-Skills
        • ¿Cómo mantenerse motivado?
        • ¿Cómo ser ampliamente confiado?
        • ¿Cómo hacer equilibrio entre tiempo y espacio?
        • ¿Cómo realizar pruebas de resistencia?
        • ¿Cómo equilibrar brevedad y abstracción?
        • ¿Cómo aprender nuevas habilidades?
        • Aprender a escribir
        • ¿Cómo hacer pruebas de integración?
        • Idiomas de comunicación
        • Herramientas pesadas
        • ¿Cómo analizar datos?
      • Team-Skills
        • ¿Cómo gestionar el tiempo de desarrollo?
        • ¿Cómo gestionar los riesgos del software de terceros?
        • ¿Cómo gestionar a los consultores?
        • ¿Cómo comunicar la cantidad adecuada?
        • ¿Cómo disentir honradamente y salir airosos?
    • 3. Avanzado
      • Compromising-Wisely
        • ¿Cómo Combatir la Presión del Cronograma?
        • ¿Cómo Entender al Usuario?
        • ¿Cómo Obtener un Ascenso?
      • Serving-Your-Team
        • ¿Cómo Desarrollar el Talento?
        • ¿Cómo Elegir en Qué Trabajar?
        • ¿Cómo Obtener lo Mejor de tus Compañeros de Equipo?
        • ¿Cómo Dividir Problemas?
        • ¿Cómo Manejar Tareas Aburridas?
        • ¿Cómo Obtener Apoyo para un Proyecto?
        • ¿Cómo Hacer Crecer un Sistema?
        • ¿Cómo Comunicarse Bien?
        • ¿Cómo Decir Cosas que la Gente no Quiere Escuchar?
        • ¿Cómo Lidiar con Mitos Gerenciales?
        • ¿Cómo Lidiar con el Caos Organizacional?
      • Technical-Judgment
        • ¿Cómo Distinguir lo Difícil de lo Imposible?
        • ¿Cómo Utilizar Lenguajes Incorporados?
        • Elección de Lenguajes
  • How to be a Programmer: Community Version
    • Appendix A - Bibliography/Websiteography
    • Appendix B - History
    • Contributions
    • Glossary
    • Creative Commons Attribution Share-Alike
    • Summary
    • 1. Beginner
      • Personal-Skills
        • Learn to Debug
        • How to Debug by Splitting the Problem Space
        • How to Remove an Error
        • How to Debug Using a Log
        • How to Understand Performance Problems
        • How to Fix Performance Problems
        • How to Optimize Loops
        • How to Deal with I/O Expense
        • How to Manage Memory
        • How to Deal with Intermittent Bugs
        • How to Learn Design Skills
        • How to Conduct Experiments
      • Team-Skills
        • Why Estimation is Important
        • How to Estimate Programming Time
        • How to Find Out Information
        • How to Utilize People as Information Sources
        • How to Document Wisely
        • How to Work with Poor Code
        • How to Use Source Code Control
        • How to Unit Test
        • Take Breaks when Stumped
        • How to Recognize When to Go Home
        • How to Deal with Difficult People
    • 2. Intermediate
      • Judgment
        • How to Tradeoff Quality Against Development Time
        • How to Manage Software System Dependence
        • How to Decide if Software is Too Immature
        • How to Make a Buy vs. Build Decision
        • How to Grow Professionally
        • How to Evaluate Interviewees
        • How to Know When to Apply Fancy Computer Science
        • How to Talk to Non-Engineers
      • Personal-Skills
        • How to Stay Motivated
        • How to be Widely Trusted
        • How to Tradeoff Time vs. Space
        • How to Stress Test
        • How to Balance Brevity and Abstraction
        • How to Learn New Skills
        • Learn to Type
        • How to Do Integration Testing
        • Communication Languages
        • Heavy Tools
        • How to analyze data
      • Team-Skills
        • How to Manage Development Time
        • How to Manage Third-Party Software Risks
        • How to Manage Consultants
        • How to Communicate the Right Amount
        • How to Disagree Honestly and Get Away with It
    • 3. Advanced
      • Compromising-Wisely
        • How to Fight Schedule Pressure
        • How to Understand the User
        • How to Get a Promotion
      • Serving-Your-Team
        • How to Develop Talent
        • How to Choose What to Work On
        • How to Get the Most From Your Team-mates
        • How to Divide Problems Up
        • How to Handle Boring Tasks
        • How to Gather Support for a Project
        • How to Grow a System
        • How to Communicate Well
        • How to Tell People Things They Don't Want to Hear
        • How to Tell People Things They Don't Want to Hear
        • How to Deal with Managerial Myths
        • How to Deal with Organizational Chaos
      • Technical-Judgment
        • How to Tell the Hard From the Impossible
        • How to Utilize Embedded Languages
        • Choosing Languages
  • Как быть программистом: Community Version
    • Приложение A - Библиография/Список сайтов
    • Приложение B - История
    • Участие в проекте
    • Глоссарий
    • Creative Commons Attribution Share-Alike
    • Содержание
    • 1. Начинающий программист
      • Personal-Skills
        • Научитесь отлаживать
        • Как отлаживать, разделяя пространство проблемы
        • Как устранять баги
        • Как отлаживать, используя логи
        • Как определять проблемы производительности
        • Как устранять проблемы производительности
        • Как оптимизировать циклы
        • Как справиться с расходами на операции чтения и записи
        • Как управлять памятью
        • Как устранять плавающие баги
        • Как научиться проектировать программы
        • Как экспериментировать
      • Team-Skills
        • Почему важно оценивать задачи
        • Как оценивать время на разработку
        • Как искать информацию
        • Как спрашивать людей
        • Как документировать правильно
        • Как работать с плохим кодом
        • Как использовать системы контроля версий
        • Как писать юнит-тесты
        • Делайте перерывы, когда вы в тупике
        • Как понять, когда идти домой
        • Как вести себя с трудными людьми
    • 2. Программист среднего уровня
      • Judgment
        • Как балансировать качество и время разработки
        • Как управлять зависимостями
        • Как оценивать стороннее программное обеспечение
        • Как решить: покупать программу или писать свою
        • Как расти профессионально
        • Как проводить собеседования
        • Как понять, когда применять высокие технологии
        • Как разговаривать с неинженерами
      • Personal-Skills
        • Как сохранять мотивацию
        • Как заслужить доверие
        • Как балансировать процессорное время и память
        • Как проводить стресс-тестирование
        • Как балансировать краткость и абстракцию
        • Как осваивать новые навыки
        • Научитесь печатать вслепую
        • Как проводить интеграционное тестирование
        • Языки взаимодействия систем
        • Стандартные технологии
        • Как анализировать данные
      • Team-Skills
        • Как управлять временем разработки
        • Как управлять рисками, связанными со сторонним программным обеспечением
        • Как руководить консультантами
        • Как соизмерять количество общения
        • Как честно выражать несогласие
    • 3. Продвинутый программист
      • Compromising-Wisely
        • Как справляться с давлением графика
        • Как понять пользователя
        • Как получить повышение
      • Serving-Your-Team
        • Как развивать таланты
        • Как выбрать, над чем работать
        • Как получить наибольшую отдачу от коллег
        • Как разделять задачи
        • Как распределять скучные задания
        • Как получить поддержку для проекта
        • Как развивать систему
        • Как качественно взаимодействовать
        • Как сообщать неприятное
        • Как справляться с менеджерскими мифами
        • Как справляться с организационным хаосом
      • Technical-Judgment
        • Как отличить сложное от невозможного
        • Как использовать встроенные языки
        • Выбор языка программирования
  • How to be a Programmer 中文版
    • 词汇表
    • 附录 A - 书目/网站目录
    • 附录 B - 历史
    • Contributions
    • Creative Commons Attribution Share-Alike
    • How to be a Programmer 正體中文版
    • 1. 入门
      • Personal-Skills
        • 學習除錯
        • 如何通过分割问题 Debug
        • 如何移除一个错误
        • 如何使用日志调试
        • 如何理解性能问题
        • 如何修复性能问题
        • 如何优化循环
        • 如何处理I/O代价
        • 如何管理内存
        • 如何处理偶现的 Bugs
        • 如何学习设计技能
        • 如何进行实验
      • Team-Skills
        • 为什么评估很重要
        • 如何评估编程时间
        • 如何发现信息
        • 如何把人们作为信息源
        • 如何睿智地写文档
        • 如何在糟糕的代码上工作
        • 如何使用源代码控制
        • 如何进行单元测试
        • 毫无头绪?,休息一下
        • 如何识别下班时间
        • 如何与不好相处的人相处
    • 2. 进阶
      • Judgment
        • 如何在开发质量与开发时间权衡
        • 如何管理软件系统依赖
        • 如何判断软件是否太不成熟了
        • 如何做购买还是构建的决定
        • 如何专业地成长
        • 如何评估面试者
        • 如何决定什么时候使用奇妙的计算机科学
        • 如何与非工程师交谈
      • Personal-Skills
        • 如何保持活力
        • 如何被广泛信任
        • 如何在时间与空间权衡
        • 如何进行压力测试
        • 如何在简洁与抽象间平衡
        • 如何学习新技能
        • 学会打字
        • 如何做集成测试
        • 交流语言
        • 重型工具
        • 如何分析数据
      • Team-Skills
        • 如何管理开发时间
        • 如何管理第三方软件危机
        • 如何管理咨询师
        • 如何适量交流
        • 如何直言异议以及如何避免
    • 3. 高级
      • Compromising-Wisely
        • 如何与时间压力做斗争
        • 如何理解用户
        • 如何获得晋升
      • Serving-Your-Team
        • 如何发展才能
        • 如何选择工作的内容
        • 如何让你队友的价值最大化
        • 如何划分问题
        • 如何处理无聊的任务
        • 如何为工程获取支持
        • 如何发展一个系统
        • 如何有效地沟通
        • 如何告诉人们他们不想听的东西
        • 如何处理管理神话
        • 如何处理组织混乱
      • Technical-Judgment
        • 如何从不可能中找到困难的部分
        • 如何使用嵌入型语言
        • 选择语言
  • How to be a Programmer 中文版
    • 词汇表
    • 附录 A - 书目/网站目录
    • 附录 B - 历史
    • Contributions
    • Creative Commons Attribution Share-Alike
    • How to be a Programmer 中文版
    • 1. 入门
      • Personal-Skills
        • 学会 Debug
        • 如何通过分割问题 Debug
        • 如何移除一个错误
        • 如何使用日志调试
        • 如何理解性能问题
        • 如何修复性能问题
        • 如何优化循环
        • 如何处理I/O代价
        • 如何管理内存
        • 如何处理偶现的 Bugs
        • 如何学习设计技能
        • 如何进行实验
      • Team-Skills
        • 为什么评估很重要
        • 如何评估编程时间
        • 如何发现信息
        • 如何把人们作为信息源
        • 如何睿智地写文档
        • 如何在糟糕的代码上工作
        • 如何使用源代码控制
        • 如何进行单元测试
        • 毫无头绪?,休息一下
        • 如何识别下班时间
        • 如何与不好相处的人相处
    • 2. 进阶
      • Judgment
        • 如何在开发质量与开发时间权衡
        • 如何管理软件系统依赖
        • 如何判断软件是否太不成熟了
        • 如何做购买还是构建的决定
        • 如何专业地成长
        • 如何评估面试者
        • 如何决定什么时候使用奇妙的计算机科学
        • 如何与非工程师交谈
      • Personal-Skills
        • 如何保持活力
        • 如何被广泛信任
        • 如何在时间与空间权衡
        • 如何进行压力测试
        • 如何在简洁与抽象间平衡
        • 如何学习新技能
        • 学会打字
        • 如何做集成测试
        • 交流语言
        • 重型工具
        • 如何分析数据
      • Team-Skills
        • 如何管理开发时间
        • 如何管理第三方软件危机
        • 如何管理咨询师
        • 如何适量交流
        • 如何直言异议以及如何避免
    • 3. 高级
      • Compromising-Wisely
        • 如何与时间压力做斗争
        • 如何理解用户
        • 如何获得晋升
      • Serving-Your-Team
        • 如何发展才能
        • 如何选择工作的内容
        • 如何让你队友的价值最大化
        • 如何划分问题
        • 如何处理无聊的任务
        • 如何为工程获取支持
        • 如何发展一个系统
        • 如何有效地沟通
        • 如何告诉人们他们不想听的东西
        • 如何处理管理神话
        • 如何处理组织混乱
      • Technical-Judgment
        • 如何从不可能中找到困难的部分
        • 如何使用嵌入型语言
        • 选择语言
  • 2-Intermediate
    • Judgment
      • Design Patterns
Powered by GitBook
On this page

Was this helpful?

  1. How to be a Programmer: Community Version
  2. 1. Beginner
  3. Personal-Skills

How to Manage Memory

PreviousHow to Deal with I/O ExpenseNextHow to Deal with Intermittent Bugs

Last updated 5 years ago

Was this helpful?

�������́A���Ȃ����g���ʂ����Ă͂Ȃ�Ȃ��M�d�ȃ��\�[�X�ł��B���΂炭����𖳎����邱�Ƃ͂ł��܂����A�ŏI�I�ɂ̓������̊Ǘ����@�����肷��K�v������܂��B

�P��̃T�u���[����͈̔͂𒴂��Ď�������K�v������̈�́A���΂���* heap allocated *�ƌĂ΂�܂��B�������̃�����N�͖��ɗ����Ȃ��̂ŁA�������y���Ă��Ȃ��Ƃ����S�~�ł��B���Ȃ����g�p���Ă���V�X�e���ɂ���ẮA�����������݂ɂȂ��Ă��܂��Ƃ��ɁA�����Ŗ����I�Ƀ������̊��蓖�Ă���������K�v�����邩������܂���B���p�ɂ��K�x�[�W�R���N�^��񋟂���V�X�e�����g�p���邱�Ƃ��ł��܂��B�K�x�[�W�R���N�^�̓S�~�ɋC�Â��āA�v���O���}���v������A�N�V�����Ȃ��ɃX�y�[�X��������܂��B�K�x�[�W�R���N�V�����͑f���炵���ł��F�G���[�����炵�A�R�[�h�̊Ȍ����ƊȌ������������܂��B�”\�ł���Ύg�p���Ă��������B

�������A�K�x�[�W�R���N�V�����ł����Ă��A���ׂẴ��������S�~�ł����ς��ɂ��邱�Ƃ��ł��܂��B�ÓT�I�ȊԈႢ�́A�n�b�V���e�[�u�����L���b�V���Ƃ��Ďg�p���A�n�b�V���e�[�u�����̎Q�Ƃ��폜���邱�Ƃ�Y��Ă��܂��܂��B�Q�Ƃ��c���Ă���̂ŁA�w���Ώۂ͎��W�ł��Ȃ����̂́A���ɗ����Ȃ��B��������������[�N�ƌĂ΂�܂��B���������[�N�𑁊��Ɍ��‚��ďC������K�v������܂��B�����ԉғ����Ă���V�X�e���ł́A�e�X�g�Ń������[���g���ʂ�����邱�Ƃ͂���܂��񂪁A���[�U�[�͎g���ʂ�����܂��B

�V�����I�u�W�F�N�g�̍쐬�́A�ǂ̃V�X�e���ł��K�x�ɍ����ł��B�������A�T�u���[�`���̃��[�J���ϐ��ɒ��ڊ��蓖�Ă�ꂽ�������́A�ʏ�A��������������j�����ɊȒP�Ȃ̂ŁA�����ł��B�s�v�ȃI�u�W�F�N�g�̍쐬�������K�v������܂��B

�d�v�ȃP�[�X�́A��x�ɕK�v�ȃI�u�W�F�N�g���̏�����`�ł���Ƃ��ł��B�����̃I�u�W�F�N�g�����ׂē����ʂ̃��������߂�ꍇ�́A���������ׂĕێ����邽�߂ɁA�P��̃������u���b�N�܂��̓o�b�t�@�����蓖�Ă邱�Ƃ��ł��܂��B�K�v�ȃI�u�W�F�N�g�́A���̃o�b�t�@���Őݒ肳�ꂽ��]�p�^�[���Ŋ��蓖�Ă��������邱�Ƃ�����܂��B���������āA�����O�o�b�t�@�ƌĂ΂�邱�Ƃ�����܂��B����͒ʏ�A�q�[�v���蓖�Ă��������ł��B

�K�x�[�W�R���N�V�����ɗ���̂ł͂Ȃ��A���蓖�Ă�ꂽ�X�y�[�X�𖾎��I�ɉ������K�v������ꍇ������܂��B���ɁA���蓖�Ă�ꂽ�������̊e������N�ɐT�d�ȃC���e���W�F���X��K�p���A�K�؂ȃ^�C�~���O�Ŋ��蓖�Ă�����������@��݌v����K�v������܂��B���\�b�h�́A�쐬����I�u�W�F�N�g�̎�ނ��ƂɈقȂ�ꍇ������܂��B���������蓖�đ���̂��ׂĂ̎��s���A���������蓖�ĉ�������ɂ���čŏI�I�Ɉ�v���邱�Ƃ��m�F����K�v������܂��B����͔��ɓ���̂ŁA�v���O���}�͎Q�ƃJ�E���g�Ȃǂ̊�{�I�Ȍ���̃K�[�x�W�R���N�V�������������邾���ōς݂܂��B

Next

How to Deal with Intermittent Bugs