Memory allocation in embedded systems is one of the main challenges that electronic designers have to face. This part, rather difficult to handle is often left to the compiler with which automatic rules are applied. Nevertheless, an optimal allocation of data to memory banks may lead to great savings in terms of running time and energy consumption. This thesis addresses various versions of the memory allocation problem. For each studied version, the number of constraints in the problem increases and thus the complexity and difficulty to solve it. The number of memory banks, the bank capacities, the size and number of access to data structures, and the conflicting data structures at each time interval are the main constraints presented in the memory allocation problem. In this work, besides some theoretical properties and results, we present ILP formulations and some metaheuristics implemented for each version of the memory allocation problem. Also, we assess the effectiveness of our metaheuristics with the exact methods and other literature metaheuristics with the aim of highlighting what makes the success of metaheuristics for this problem.