Maroua MAALEJ's personal page

Hello, welcome in my personal web page. You can find here all information about me, my research and my published papers.

About me My Researches My CV Published papers Teaching Contact Me PhD Thesis

About me

I am currently a postdoctoral fellow in AdaCore Company. I recently defended my PhD thesis performed within the ROMA project-team at LIP (ENS Lyon). I have been working with Laure Gonnord and Frédéric Vivien.

I am interested in optimizing programs using static information gathered at compile time by means of abstract interpretation. To that end, I focused on developping algorithms that enable optimizations and make programs more efficient in terms of time and memory consumption.

Here, you can find more information related to my cursus and my research. For those who have questions, comments, or insterested by the work I do, please feel free to contact me.

Get Started!

A deeper idea about my researches

Abstract Interpretation

Static Analysis



Curriculum Vitae

Full English version

Download Now!

Full French version

Download Now!

My published papers

In this section, you find my last published papers:

  • [Maalej and Gonnord 2016] Maroua Maalej and Laure Gonnord. Do we still need new Alias Analyses? Research Report RR-8812, ENS Lyon ; CNRS ; INRIA, November 2015. [pdf]
  • [Paisante et al. 2016] Vitor Paisante, Maroua Maalej, Leonardo Barbosa, Laure Gonnord, and Fernando Pereira. Symbolic range analysis of pointers. In Proceedings of International Symposium of Code Generation and Optmization. 2016. Barcelon, Spain, March 2016, pp.791-809. [pdf]
  • [Maalej et al. 2017] Maroua Maalej, Vitor Paisante, Pedro Ramos, Laure Gonnord, and Fernando Pereira. Pointer Disambiguation via Strict Inequalities. In Proceedings of International Symposium of Code Generation and Optmization. 2017. Austin, USA. Feb 2017, pp.134--147 [pdf]
  • [Maalej et al. 2017] Maroua Maalej, Vitor Paisante, Fernando Pereira and Laure Gonnord. Combining Range and Inequality Information for Pointer Disambiguation. In Science of Computer Programming Journal, Elsevier, October 2017. [pdf]


Algorithms, Functional programming and Recursion (LIF3, Autumn 2015)

[TP1] Get started with Scheme, List.
[TP2] List, Let.
[TP3] Sort, Lists of lists.
[TP4] Deep recursion.
[TP5] Trees.
[TP6] Assignment.
[TP7] Project.

Systems Architecture (LIF6, Spring 2016)

[TP1] Get started with circuits using LOGISIM.
[TP2] Combinatory circuits and Two's complement.
[TP3] Sequential Circuits, Registers, Memory.
[TP4] Testing circuits.
[TP5] Introducing LC-3 architecture.
[TP6] LC-3 programming exercices.
[TP7] LC-3 design Part 1.
[TP8] LC-3 design Part 2.

Advanced Programming and Algorithms (LIFAP3, Autumn 2017)

[TP + TD] TP + TD

Let's Get In Touch!

For any question and for more details about my researches, don't hesitate to contact me!

(+33) 4 37 28 76 23

46 Rue d'Amsterdam, 75010 Paris 10, France


My PhD Thesis:

Low-cost memory analyses for efficient compilers



President: Xavier Urbain
Reviewers: Sanjay Rajopadhye, Corinne Ancourt
Examiners: Alain Girault, Karine Heydemann, Vincent Loechner
Directors: Laure Gonnord, Frédéric Vivien


La rapidité, la consommation énergétique et l’efficacité des systèmes logiciels et matériels sont devenues les préoccupations majeures de la communauté informatique de nos jours. Gérer de manière correcte et efficace les problématiques mémoire est essentiel pour le développement des programmes de grande tailles sur des architectures de plus en plus complexes. Dans ce contexte, cette thèse contribue aux domaines de l’analyse mémoire et de la compilation tant sur les aspects théoriques que sur les aspects pratiques et expérimentaux. Outre l’étude approfondie de l’état de l’art des analyses mémoire et des différentes limitations qu’elles montrent, notre contribution réside dans la conception et l’évaluation de nouvelles analyses qui remédient au manque de précision des techniques publiées et implémentées. Nous nous sommes principalement attachés à améliorer l’analyse de pointeurs appartenant à une même structure de données, afin de lever une des limitations majeures des compilateurs actuels. Nous développons nos analyses dans le cadre général de l’interprétation abstraite « non dense ». Ce choix est motivé par les aspects de correction et d’efficacité: deux critères requis pour une intégration facile dans un compilateur. La première analyse que nous concevons est basée sur l’analyse d’intervalles des variables entières ; elle utilise le fait que deux pointeurs définis à l’aided’un même pointeur de base n’aliasent pas si les valeurs possibles des décalages sont disjointes. La seconde analyse que nous développons est inspirée du domaine abstrait des Pentagones ; elle génère des relations d’ordre strict entre des paires de pointeurs comparables. Enfin, nous combinons et enrichissons les deux analyses précédentes dans un cadre plus général.
Ces analyses ont été implémentées dans le compilateur LLVM. Nous expérimentons et évaluons leurs performances, et les comparons aux implémentations disponibles selon deux métriques : le nombre de paires de pointeurs pour lesquelles nous inférons le non-aliasing et les optimisations rendues possibles par nos analyses.


This thesis was motivated by the emergence of massively parallel processing and supercomputing that tend to make computer programming extremely performing. Speedup, the power consumption, and the efficiency of both software and hardware are nowadays the main concerns of the information systems community. Handling memory in a correct and efficient way is a step toward less complex and more performing programs and architectures. This thesis falls into this context and contributes to memory analysis and compilation fields in both theoretical and experimental aspects.
Besides the deep study of the current state-of-the-art of memory analyses and their limitations, % that we accomplished, our theoretical results stand in designing new algorithms to recover part of the imprecision that published techniques still show. Among the present limitations, we focus our research on the pointer arithmetic to disambiguate pointers within the same data structure. We develop our analyses in the abstract interpretation framework. The key idea behind this choice is correctness, and scalability: two requisite criteria for analyses to be embedded to the compiler construction. The first alias analysis we design is based on the range lattice of integer variables. Given a pair of pointers defined from a common base pointer, they are disjoint if their offsets cannot have values that intersect at runtime. The second pointer analysis we develop is inspired from the Pentagon abstract domain. We conclude that two pointers do not alias whenever we are able to build a strict relation between them, valid at program points where the two variables are simultaneously alive. In a third algorithm we design, we combine both the first and second analysis, and enhance them with a coarse grained but efficient analysis to deal with non related pointers.
We implement these analyses on top of the \tool{LLVM} compiler. We experiment and evaluate their performance based on two metrics: the number of disambiguated pairs of pointers compared to common analyses of the compiler, and the optimizations further enabled thanks to the extra precision they introduce.